MICROSOFT

EP01. “Loop through Defined Range 遍历指定范围”

首页 Microsoft 工具 Excel · VBA · Loop · EP01
约 4 分钟· #EP01#Excel#Loop
🔒 登录后可标记已读
  • 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

代码说明

  1. 声明 rng(要处理的范围)、cell(循环变量,代表范围里正在处理的那个单元格)两个 Range 对象
  2. Set rng = Range("A1:A3") 把 A1 到 A3 这三个单元格赋给 rng(对象变量要用 Set 赋值)
  3. For Each cell In rng 会依次把 rng 里的每个单元格赋给 cell,循环体里对 cell 做的操作就是对当前这个单元格操作
  4. cell.Value = cell.Value * cell.Value 把当前单元格的值平方后写回原格
  5. Next cell 结束这一轮循环,继续处理下一个单元格

用 Selection 处理任意范围

如果不想把范围写死成 A1:A3,可以改成处理使用者当下选中的范围:

Set rng = Selection

这样不管使用者选中多大范围,程序都会用同一段循环逻辑处理。


怎么运行

先在工作表 A1:A3 输入数字,Alt + F11 打开 VBA 编辑器,把代码放进按钮点击事件,按 F5 或点命令按钮执行,A1:A3 的数字会被替换成各自的平方值。


学完你会

  • ✅ 用 For Each ... In ... Next 遍历一个指定范围里的每个单元格
  • ✅ 知道对象变量赋值要用 Set
  • ✅ 用 Selection 让循环适应使用者当下选中的任意范围

常见错误

  • 忘记用 SetRange 对象赋值,直接写 rng = Range("A1:A3") 会报错——对象赋值必须加 Set
  • For Each 遍历的对象类型要跟循环变量类型一致(这里 cell 必须也是 Range),类型不匹配会报错
  • Selection 时如果使用者没有先选中任何范围,或者选中了非数字的单元格,cell.Value * cell.Value 会报类型不匹配的错误

Sources

Blog / Website:

  1. Loop through Defined Range