一个VBA For循环中有多个范围?
我是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
您可以简单地通过组合两个范围地址来创build非连续范围,如下所示:
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
如Thomas Inzina解决scheme所指出的那样,通过编辑join SpecialCells
方法和UsedRange
的优点
使用Range
对象的SpecialCells()
方法,避免循环
Private Sub CommandButton22_Click() 'HIGHLIGHT Intersect(Union(Range("N:N"), Range("AA:AA")), ActiveSheet.UsedRange).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 6 End Sub
是。 使用Application.Union
方法。 返回区域 /选区内区域的集合或连续的单元块。
以下代码工作。
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"))