繁体   English   中英

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

[英]Multiple ranges in one 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

编辑加入 SpecialCells与造福方法UsedRange由托马斯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

您可以通过组合两个范围地址来创建非连续范围,如:

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

在此输入图像描述

在此输入图像描述

是。 使用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"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM