MICROSOFT

EP13. “Compare Ranges 比较多个范围”

首页 Microsoft 工具 Excel · VBA · Range Object · EP13
约 5 分钟· #EP13#Excel#Range Object
🔒 登录后可标记已读
  • 这篇结合 EP12 的 Areas 集合,写一个宏比较使用者用 Ctrl 多选的好几块范围
  • 找出哪些值在不同区域之间是「独一无二」的(不重复出现)
  • 会用到四层嵌套循环,逐一比较每两块区域里的每个单元格
  • 前置知识是 EP12 Areas 集合、嵌套循环

重点内容


适用版本

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


完整代码

Dim rangeToUse As Range, singleArea As Range, cell1 As Range, cell2 As Range, i As Integer, j As Integer

Set rangeToUse = Selection

Cells.Interior.ColorIndex = 0
Cells.Borders.LineStyle = xlNone

If Selection.Areas.Count <= 1 Then
      MsgBox "Please select more than one area."
Else

rangeToUse.Interior.ColorIndex = 38

For Each singleArea In rangeToUse.Areas
    singleArea.BorderAround ColorIndex:=1, Weight:=xlThin
Next singleArea

For i = 1 To rangeToUse.Areas.Count
    For j = i + 1 To rangeToUse.Areas.Count
        For Each cell1 In rangeToUse.Areas(i)
            For Each cell2 In rangeToUse.Areas(j)
                If cell1.Value = cell2.Value Then
                    cell1.Interior.ColorIndex = 0
                    cell2.Interior.ColorIndex = 0
                End If
            Next cell2
        Next cell1
    Next j
Next i

End If

逻辑说明

  • 先清掉整张工作表旧的背景色和边框,避免上次执行的痕迹干扰
  • Selection.Areas.Count <= 1 检查使用者是不是真的用 Ctrl 选了不止一块范围,没有就提示重新选取
  • 把整个选取范围先统一上色,再逐块加边框,方便看清各区域的边界
  • 四层嵌套循环:外两层走过每两块区域的组合(ijji+1 开始避免重复比较),内两层逐一比较两块区域里的每个单元格
  • 只要两个单元格数值相同,就把两者的背景色都清掉——最后还留着颜色的,就是「在其他区域都找不到相同值」的独一无二数据

[截图:用 Ctrl 多选好几块范围后运行宏,各区域先被统一上色加边框,重复值清色后只剩独一无二的数据保留底色的效果]


学完你会

  • ✅ 写出一个能比较多个不相邻区域数值的宏
  • ✅ 用嵌套循环(i、j 从 i+1 开始)避免同一对区域被重复比较
  • ✅ 用背景色变化标示出哪些数值是各区域间独一无二的

常见错误

  • 使用者只选了一块范围就执行宏,忘记检查 Areas.Count,导致逻辑没有东西可比较
  • 内层循环 j 没有从 i + 1 开始,导致同一对区域被重复比较两次
  • 想找「不同的值」却把清色逻辑写反,反而把「唯一值」清掉、留下重复值

Sources

Blog / Website:

  1. Compare Ranges