Excel VBA代码修改:双条件匹配高亮重复值需求
修改后的Excel VBA代码实现双条件高亮需求
以下是符合你需求的VBA代码,已修正双条件匹配逻辑,同时处理空白单元格的白色填充:
Sub HighlightMatchingCells() Dim wsMark As Worksheet, wsTally As Worksheet Dim markData As Variant, tallyCell As Range Dim i As Long, matchFound As Boolean ' 绑定目标工作表 Set wsMark = ThisWorkbook.Worksheets("ShpMarkLog(test)") Set wsTally = ThisWorkbook.Worksheets("TALLY-SHEET") ' 先将目标区域统一设为白色填充,覆盖原有格式 wsTally.Range("H8:AK103").Interior.ColorIndex = xlColorIndexNone ' 读取ShpMarkLog(test)的订单号、箱号数据到数组,提升运行效率 markData = wsMark.Range("A2:B" & wsMark.Cells(wsMark.Rows.Count, "A").End(xlUp).Row).Value ' 遍历TALLY-SHEET的目标单元格区域 For Each tallyCell In wsTally.Range("H8:AK103") If tallyCell.Value <> "" Then matchFound = False ' 遍历ShpMarkLog的数据,检查双条件匹配 For i = LBound(markData, 1) To UBound(markData, 1) ' 双条件:订单号匹配 + 箱号匹配 If wsTally.Cells(tallyCell.Row, "A").Value = markData(i, 1) And tallyCell.Value = markData(i, 2) Then matchFound = True Exit For ' 找到匹配项后跳出循环,减少冗余判断 End If Next i ' 匹配成功则高亮(这里用黄色,可自行修改ColorIndex换颜色) If matchFound Then tallyCell.Interior.ColorIndex = 6 End If End If Next tallyCell ' 释放对象变量 Set wsMark = Nothing Set wsTally = Nothing End Sub
关键说明:
- 工作表引用:直接绑定目标工作表,避免切换工作表的操作错误
- 预设置白色填充:先统一重置目标区域格式,确保空白单元格和未匹配单元格都是白色
- 数组优化:将ShpMarkLog的核心数据读入数组,比逐单元格读取效率高很多
- 双条件判断:同时校验订单号(假设TALLY-SHEET的Order No在A列,ShpMarkLog的SMOrder_No在A列)和箱号(ShpMarkLog的SMNewCTNno在B列),完全符合你的需求
- 颜色自定义:如果需要更换高亮颜色,修改
ColorIndex的值即可(比如3是红色,4是绿色)
注意:
如果你的订单号、箱号所在列和代码假设的不一致,自行修改代码中的列标识(比如把"A"改成对应列的字母)
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

