一个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"))