![](/img/trans.png)
[英]How to format all cells in one sheet based on corresponding cell values in another sheet using XlsxWriter?
[英]Highlight cells in a sheet based on corresponding cell values in another sheet with a macro
正如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.