Excel·VBA单元格区域数据对比差异标记颜色

之前的一篇博客《Excel·VBA单元格重复值标记颜色》,是对重复的整行标记颜色

而本文是按行对比2个单元格区域的数据,并对有差异的区域(一个单元格区域有的,而另一个单元格区域没有的)标记颜色,且只要存在任意1个字符不同的,则标记颜色

单元格区域数据对比标色

代码写为自定义函数使用更为方便,并使用 Union 方法在每个单元格区域判断结束后统一标色

vbnet 复制代码
Function 单元格区域数据对比标色(ByVal rng1 As Range, ByVal rng2 As Range)
    '2个单元格区域数据按行对比,1个区域中有另1个区域中无则标色,每行中任意1个字符不同则标色
    Dim dict1 As Object, dict2 As Object, delimiter$, color_index&, i&, j&, temp$, k, color_rng As Range
    Set dict1 = CreateObject("scripting.dictionary"): delimiter = Chr(28)
    Set dict2 = CreateObject("scripting.dictionary"): color_index = 6  '标记黄色
    For i = 1 To rng1.Rows.Count  'rng1写入字典
        temp = ""
        For j = 1 To rng1.Columns.Count
            temp = temp & delimiter & rng1.Cells(i, j).Value
        Next
        If Not dict1.Exists(temp) Then
            Set dict1(temp) = rng1.Rows(i)
        Else
            Set dict1(temp) = Union(dict1(temp), rng1.Rows(i))
        End If
    Next
    For i = 1 To rng2.Rows.Count  'rng2写入字典
        temp = ""
        For j = 1 To rng2.Columns.Count
            temp = temp & delimiter & rng2.Cells(i, j).Value
        Next
        If Not dict2.Exists(temp) Then
            Set dict2(temp) = rng2.Rows(i)
        Else
            Set dict2(temp) = Union(dict2(temp), rng2.Rows(i))
        End If
    Next
    For Each k In dict1.keys  '遍历dict1,判断所有键在dict2中是否存在,不存在则写入标色区域color_rng
        If Not dict2.Exists(k) Then
            If color_rng Is Nothing Then
                Set color_rng = dict1(k)
            Else
                Set color_rng = Union(color_rng, dict1(k))
            End If
        End If
    Next
    'Union无法跨工作表使用,故先对color_rng标色1次
    If Not color_rng Is Nothing Then color_rng.Interior.ColorIndex = color_index: Set color_rng = Nothing
    For Each k In dict2.keys  '遍历dict2,判断所有键在dict1中是否存在
        If Not dict1.Exists(k) Then
            If color_rng Is Nothing Then
                Set color_rng = dict2(k)
            Else
                Set color_rng = Union(color_rng, dict2(k))
            End If
        End If
    Next
    If Not color_rng Is Nothing Then color_rng.Interior.ColorIndex = color_index: Set color_rng = Nothing
    Debug.Print "单元格区域数据对比标色,完成"
End Function

举例

vbnet 复制代码
Sub 测试()
    Dim rng1 As Range, rng2 As Range
    Set rng1 = Worksheets("表1").[a1].CurrentRegion
    Set rng2 = Worksheets("表2").[a1].CurrentRegion
    a = 单元格区域数据对比标色(rng1, rng2)
End Sub

对比差异并标记黄色

相关推荐
VBA63371 天前
VBA信息获取与处理专题七第二节 网络通信过程的解读
vba
得闲喝茶1 天前
跨表数据匹配——VLOOKUP、XLOOKUP
大数据·数据库·笔记·信息可视化·数据分析·excel
AI刀刀2 天前
豆包智能体对话导出后,如何构建长期归档与高效检索体系?
android·人工智能·word·excel·ai导出鸭
ZX0X学习中2 天前
一句话让 AI 生成 Excel 多文件合并工具:码道 CLI 实战
人工智能·excel·ai编程·华为云码道
得闲喝茶3 天前
Excel——数据透析表
数据库·经验分享·笔记·其他·信息可视化·excel
小弥儿3 天前
无需安装WPS 和 Office!开源 OfficeCLI,Claude/Copilot 可直接调用,自动生成编辑Word/PPT/Excel
word·powerpoint·excel
Metaphor6923 天前
使用 Python 冻结 Excel 文件中的行、列和单元格
开发语言·python·excel
花 满 楼4 天前
EB引脚配置自动化方案|告别手动繁琐配PIN,Excel+Python批量生成ARXML实现一键配置
python·excel·eb
用户298698530144 天前
Python 实现 Excel 新旧格式互转:告别 Office 依赖的自动化方案
后端·python·excel
未来之窗软件服务5 天前
Excel物业台帐租金合同资产—万象EXCEL应用(28) —东方仙盟
excel·仙盟创梦ide·东方仙盟·万象excel