MICROSOFT

EP02. “Dynamic Range 动态范围应用”

首页 Microsoft 工具 Excel · VBA · Range Object · EP02
约 3 分钟· #EP02#Excel#Range Object
🔒 登录后可标记已读
  • 这篇结合 EP01 的 CurrentRegion,写一个宏自动找出一批数字里的最大值
  • 找到最大值后自动把它标成红色
  • 不管数据实际有多少笔,宏都能正确处理,不用改代码
  • 前置知识是 EP01 CurrentRegion、For Each 循环

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


完整代码

Dim maximum As Double, rng As Range, cell As Range

Cells.Interior.ColorIndex = 0

Set rng = Range("A1").CurrentRegion

maximum = WorksheetFunction.Max(rng)

For Each cell In rng
    If cell.Value = maximum Then cell.Interior.ColorIndex = 22
Next cell

逻辑说明

  • Cells.Interior.ColorIndex = 0:先清掉整张工作表原本的背景色,避免上次执行留下的标记干扰这次结果
  • Range("A1").CurrentRegion:自动抓出 A1 所在的连续数据区域,数据笔数变多变少都不用改代码
  • WorksheetFunction.Max(rng):用 Excel 的 MAX 函数算出这个范围里的最大值
  • 循环走过范围里每一格,值等于最大值的就标成红色(ColorIndex 22)

[截图:运行宏后的工作表,数据区域里数值最大的那一格背景变成红色,其余维持无底色]


学完你会

  • ✅ 写出一个能自动标记最大值的宏,不用管数据笔数变化
  • ✅ 用 CurrentRegion 搭配 For Each 循环走过整个动态范围
  • ✅ 知道执行宏前要先清除旧的标记颜色,避免结果混乱

常见错误

  • 忘记先清除旧的背景色,重跑一次之后画面出现好几个红色标记
  • 数据不是从固定的 A1 开始,CurrentRegion 的起点单元格没对应实际数据的左上角
  • 如果最大值有重复(好几格并列最大),代码会把所有相同的格子都标红,不是只标一个

Sources

Blog / Website:

  1. Dynamic Range