EP01. “Loop through Defined Range 遍历指定范围”
🔒 登录后可标记已读For Each循环可以逐一遍历一个指定范围(Range)里的每个单元格,不用像For i = 1 To n那样自己算行列号- 这篇用「把 A1:A3 每个数字平方」当例子
- 前置知识:
Range对象的基本概念 - 学完能理解
For Each ... In ... Next这个循环结构,也是后面很多 Loop 系列笔记的基础写法
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
完整 VBA 代码
Dim rng As Range, cell As Range
Set rng = Range("A1:A3")
For Each cell In rng
cell.Value = cell.Value * cell.Value
Next cell
代码说明
- 声明
rng(要处理的范围)、cell(循环变量,代表范围里正在处理的那个单元格)两个Range对象 - 用
Set rng = Range("A1:A3")把 A1 到 A3 这三个单元格赋给rng(对象变量要用Set赋值) For Each cell In rng会依次把rng里的每个单元格赋给cell,循环体里对cell做的操作就是对当前这个单元格操作cell.Value = cell.Value * cell.Value把当前单元格的值平方后写回原格Next cell结束这一轮循环,继续处理下一个单元格
用 Selection 处理任意范围
如果不想把范围写死成 A1:A3,可以改成处理使用者当下选中的范围:
Set rng = Selection
这样不管使用者选中多大范围,程序都会用同一段循环逻辑处理。
怎么运行
先在工作表 A1:A3 输入数字,Alt + F11 打开 VBA 编辑器,把代码放进按钮点击事件,按 F5 或点命令按钮执行,A1:A3 的数字会被替换成各自的平方值。
学完你会
- ✅ 用
For Each ... In ... Next遍历一个指定范围里的每个单元格 - ✅ 知道对象变量赋值要用
Set - ✅ 用
Selection让循环适应使用者当下选中的任意范围
常见错误
- 忘记用
Set给Range对象赋值,直接写rng = Range("A1:A3")会报错——对象赋值必须加Set For Each遍历的对象类型要跟循环变量类型一致(这里cell必须也是Range),类型不匹配会报错- 用
Selection时如果使用者没有先选中任何范围,或者选中了非数字的单元格,cell.Value * cell.Value会报类型不匹配的错误
Sources
Blog / Website: