vba for循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vba for循环相关的知识,希望对你有一定的参考价值。

参考技术A

本文是《王佩丰VBA》课程的总结版。第一课是for循环。

是针对 固定位置 的一组动作集合,vba是用vb书写宏的一种方式,另一种方法为 宏录制

加载开发工具的步骤:文件→选项→自定义功能区→开发工具→录制宏→录完后执行宏

录制 的方法是最简单的创建宏的方式,对一张表录制的宏操作,可以随即运用到其他表上, 其他表的内容位置必须完全一样

录制宏→删除CDE→按住shift,移动J列→删选数据→停止录制

改颜色
对当前单元格,填充紫色

绝对引用 选中H1,填充单元格颜色为紫色

相对引用 向下3格,填充紫色

for循环针对 重复步骤 ,起过程控制作用。重点在于找到 重复的步骤 。此例即用到 相对引用 ,向下7行填充紫色,循环下一次重复进行。

【1】生成工资条

过程:选中第1行复制,到第3行,插入复制单元格。选中第3行复制,到第5行,插入复制单元格。循环往复。

重复过程:选中复制、向下2行、插入复制单元格。

【2】恢复工资条

添加按钮 :右键属性可以控制大小、位置都固定,还可修改名称。

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

【中文标题】一个VBA For循环中有多个范围?【英文标题】:Multiple ranges in one VBA For loop? 【发布时间】:2017-02-10 21:12:22 【问题描述】:

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

【问题讨论】:

【参考方案1】:

编辑为加入 SpecialCells 方法,并受益于 Thomas Inzina 解决方案所指出的 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

【讨论】:

【参考方案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

【讨论】:

谢谢!它像梦一样工作。 UsedRange 还修复了我的空单元格不在数据范围内的问题。非常感谢您的帮助!【参考方案3】:

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

【讨论】:

以上是关于vba for循环的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA中for循环语句的用法

vba中五种循环语句的区别

为 vba 使用 for 循环

VBA:在 For 循环中命名表

VBA - 如何有条件地跳过for循环迭代

在 For-Next 循环 vba 期间按顺序显示控件