一个VBA For循环中的多个范围?

时间:2016-10-02 23:49:07

标签: excel vba excel-vba for-loop

我是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

3 个答案:

答案 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

enter image description here

enter image description here

答案 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

它会为整个色彩柱着色。如果您只想为一个子集着色,例如:从两列中的行1022,然后将联合线更改为此类

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