我是VBA的初学者,我只想突出列N和AA中的空单元格。可以在一个For循环中使用多个范围来代替以下代码吗?
Private Sub CommandButton22_Click()
'HIGHLIGHT
Dim cell As Range
For Each cell In Range("N")
If cell.Value = vbNullString Then
cell.Interior.ColorIndex = 6
End If
Next cell
For Each cell In Range("AA")
If cell.Value = vbNullString Then
cell.Interior.ColorIndex = 6
End If
Next cell
End Sub
答案 0 :(得分:7)
使用SpecialCells
编辑加入 UsedRange
方法,正如Thomas Inzina解决方案所指出的那样
使用Range
对象的SpecialCells()
方法并避免循环
Private Sub CommandButton22_Click()
'HIGHLIGHT
Intersect(Union(Range("N:N"), Range("AA:AA")), ActiveSheet.UsedRange).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 6
End Sub
答案 1 :(得分:2)
您可以通过组合两个范围地址来创建非连续范围,如:
For Each cell In Range("N:N,AA:AA")
Next
但是使用Intersect方法将范围修剪为工作表的已用部分会更有效:
For Each cell In Intersect(Range("N:N,AA:AA"), ActiveSheet.UsedRange)
If cell.Value = vbNullString Then
cell.Interior.ColorIndex = 6
End If
Next
答案 2 :(得分:1)
是。使用Application.Union
方法。返回Areas /选择内的区域集合或连续的单元格块。
以下代码有效。
Private Sub CommandButton22_Click()
'HIGHLIGHT
Dim cell As Range
Dim target As Range
Set target = Application.Union(ActiveSheet.Range("N:N"), ActiveSheet.Range("AA:AA"))
For Each area In target.Areas
For Each cell In area
If cell.Value = vbNullString Then
cell.Interior.ColorIndex = 6
End If
Next cell
Next area
End Sub
它会为整个色彩柱着色。如果您只想为一个子集着色,例如:从两列中的行10
到22
,然后将联合线更改为此类
Set target = Application.Union(ActiveSheet.Range("N10:N22"), ActiveSheet.Range("AA10:AA22"))