2016-10-02 44 views
3

我是VBA的初学者,我只想突出显示N和AA列中的空单元格。在一个For循环中可以有多个范围来代替下面的代码来完成这个工作?在一个VBA 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 

回答

2

你可以简单地通过组合两个范围地址,如创建一个非连续范围:

For Each cell In Range("N:N,AA:AA") 

Next 

但它是更有效地使用该相交方法的范围内修剪到工作表的已使用部分:

For Each cell In Intersect(Range("N:N,AA:AA"), ActiveSheet.UsedRange) 
    If cell.Value = vbNullString Then 
     cell.Interior.ColorIndex = 6 
    End If 
Next 

enter image description here

enter image description here

+1

比你呢!它像梦一样工作。 UsedRange还修复了我的空单元格不在数据范围问题内。我非常感谢你的帮助! –

+0

感谢您接受我的回答。快乐编码:) – 2016-10-03 12:42:30

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 

虽然它会着色整个列。如果你只是想要的颜色的子集,例如:通过在两列22从行10,那么工会行更改为类似这样

Set target = Application.Union(ActiveSheet.Range("N10:N22"), ActiveSheet.Range("AA10:AA22"))

7

编辑以加入SpecialCells做法与受益如由托马斯Inzina溶液

使用SpecialCells()方法Range对象的指出并避免发生循环的UsedRange

Private Sub CommandButton22_Click() 
    'HIGHLIGHT 
    Intersect(Union(Range("N:N"), Range("AA:AA")), ActiveSheet.UsedRange).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 6 
End Sub