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
它会为整个列着色。如果您只想为子集着色,例如:从两列中的行 10
到 22
,然后将联合行更改为类似这样的内容
Set target = Application.Union(ActiveSheet.Range("N10:N22"), ActiveSheet.Range("AA10:AA22"))
【讨论】:
以上是关于vba for循环的主要内容,如果未能解决你的问题,请参考以下文章