范围"C2:E" & lastrow
,"G2:G" & lastrow
和"Q2:R" & lastrow
包含一个动态分配到所有单元格的公式:"=IFNA(VLOOKUP($B2,CONTACTS,2/3/4/8/10/11,FALSE),"")"
,其中列C返回第2列中的值在CONTACTS表中,D列为第三列中的值,E列为第四列中的值,依此类推。
现在,如果它不包含任何内容/空白,则需要使用VBA在RED中突出显示此范围内的所有单元格,这意味着vlookup在CONTACTS表中找不到任何内容。数据是动态的,因此没有确定的行数,并且我不想格式化未包含在数据中的单元格。
我该怎么做? TIA!
答案 0 :(得分:1)
不太理想,但以下方法应该起作用。根据需要更改工作表名称。理论上,如果所有单元格都有一个公式,则可以删除IsEmpty部分。
Dim rng As Range
For Each rng In ThisWorkbook.Worksheets("Sheet1").Range("C2:E" & lastRow)
If IsEmpty(rng) Or rng = vbNullString Then rng.Interior.Color = vbRed
Next
您还可以将SpecialCells与公式一起使用,以仅对具有公式的单元格进行处理(测试是否首先出现公式,或者在未找到公式的情况下进行错误处理):
Dim rng As Range
For Each rng In ThisWorkbook.Worksheets("Sheet1").Range("C2:E" & lastRow).SpecialCells(xlCellTypeFormulas)
If rng = vbNullString Then rng.Interior.Color = vbRed
Next
您可以使用union
组合不同的范围:
Dim rng As Range
With ThisWorkbook.Worksheets("Sheet1")
For Each rng In Union(.Range("C2:E" & lastRow), .Range("G2:G" & lastRow), .Range("Q2:R" & lastRow)).SpecialCells(xlCellTypeFormulas)
If rng = vbNullString Then rng.Interior.Color = vbRed
Next
End With
答案 1 :(得分:1)
条件格式可以使此任务更容易。这是在VBA中应用CFR的方法。
with thisworkbook.worksheets("sheet4").range("C:E, G:G, Q:R")
.FormatConditions.Delete
with .FormatConditions.Add(Type:=xlExpression, Formula1:="=and(iserror(--C1), C1=text(,))")
.Interior.Color = vbred
end with
end with
with thisworkbook.worksheets("sheet4").range("C:E, G:G, Q:R")
.FormatConditions.Delete
with .FormatConditions.Add(Type:=xlExpression, Formula1:="=and(istext(C1), C1=text(,))")
.Interior.Color = vbred
end with
end with
with thisworkbook.worksheets("sheet4").range("C:E, G:G, Q:R")
.FormatConditions.Delete
with .FormatConditions.Add(Type:=xlExpression, Formula1:="=and(isformula(C1), C1=text(,))")
.Interior.Color = vbred
end with
end with
答案 2 :(得分:0)
您可以避免条件格式设置和循环操作
With Intersect(Range("C:E, G:G, Q:R"), Rows("1:" & lastrow))
.Interior.Color = vbRed ' first color all cells
.SpecialCells(xlCellTypeFormulas, xlNumbers).Interior.Pattern = xlNone ' then un-color those with a numeric output
End With