2016-10-02 46 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