繁体   English   中英

使用宏根据另一个工作表中的相应单元格值突出显示工作表中的单元格

[英]Highlight cells in a sheet based on corresponding cell values in another sheet with a macro

我想创建一个宏,该宏将基于另一个工作表值突出显示工作表的某些单元格。

我的 excel 文件中有两张表格:

检查”和“公式

我想要一个宏,如果工作表“公式”中的相应单元格标记为“失败”,则用红色突出显示工作表“检查”中的单元格。

注意:列数不是静态的(它们的列数没有固定结构,可以是 4 ,5,6 等)

我提供了截图以便更好地理解:

检查表中的单元格将突出显示为红色

如果 FAIL 出现在公式表中,则应突出显示其他表中的相应值

正如Fane所提到的,这可以使用条件格式轻松完成,使用一个简单的公式:

 =(Formula!A1="FAIL")

您选择要应用此格式的所有单元格并填写该公式,如以下屏幕截图所示:

在此处输入图像描述

如果您说“但我不希望在第二列中出现 True, False”,您不需要:当我根据公式创建条件格式时,我总是在临时帮助列中检查我的公式并且之后删除它:-)

如果您不喜欢条件格式,请使用下一个 VBA 代码。 它将要处理的范围(从)放在一个数组中,在所有数组元素之间迭代,并在最后创建一个要着色的Union范围:

Sub HighlightCells()
 Dim shCh As Worksheet, shF As Worksheet, lastR As Long, lastCol As Long
 Dim rngF As Range, arrH, i As Long, j As Long, rngFAIL As Range
 
 Set shCh = Sheets("Check") 
 Set shF = Sheets("Formula")
 lastR = shCh.Range("A" & shCh.rows.count).End(xlUp).row
 lastCol = shCh.cells(1, shCh.Columns.count).End(xlToLeft).column
 
 Set rngF = shCh.Range("A2", shCh.cells(lastR, lastCol))
  rngF.Interior.Color = xlNone 'clear the previous coloring
 arrH = shF.Range("A2", shF.cells(lastR, lastCol)).Value2
 
 For i = 1 To UBound(arrH)
    For j = 1 To UBound(arrH, 2)
        If arrH(i, j) = "FAIL" Then
            Set rngFAIL = addToFAIL(rngF.cells(i, j), rngFAIL)
        End If
    Next j
 Next i
 If Not rngFAIL Is Nothing Then rngFAIL.Interior.Color = vbRed
End Sub

Function addToFAIL(rng As Range, rngFAIL As Range) As Range
  If rngFAIL Is Nothing Then
        Set addToFAIL = rng
  Else
        Set addToFAIL = Union(rngFAIL, rng)
  End If
End Function

但这不是动态的,因为它是......

为了动态,您可以将其放置在“公式”表的事件中,具体取决于值(FAIL)的更改方式...可能, Calculate更改是否发生在公式中,因为表名称让我们假设.

如果要返回的Union范围很大,则代码速度可能会显着降低,但即使在这种情况下,也可以创建范围单元格的(数量)限制并逐步为必要的单元格着色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM