You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#在两个Excel文件指定列中查找匹配行并高亮

Excel匹配与条件格式化解决方案

针对你描述的两个Excel文件匹配需求,我整理了两种实用的实现方式——内置函数+条件格式(适合非编程用户)和VBA宏(适合批量处理或更大数据量),具体操作如下:

准备工作

先确保FirstFile.xlsx和SecondFile.xlsx都已打开,我们以SecondFile.xlsx的工作表为操作对象(需要标记绿色的行在这里),FirstFile.xlsx作为匹配数据源。假设两个文件的目标数据都在Sheet1中。


方法1:内置函数+条件格式(无需编程)

步骤1:添加辅助列判断匹配状态

在SecondFile.xlsx的Sheet1中插入一列(比如D列,命名为MatchStatus),在D2单元格输入以下公式,然后下拉填充到所有行:

=IF(NOT(ISBLANK(A2)), 
    IF(ISNUMBER(XLOOKUP(A2, FirstFile.xlsx!Sheet1!A:A, FirstFile.xlsx!Sheet1!A:A)), "Code匹配", "Code未匹配"), 
    IF(ISNUMBER(XLOOKUP(RIGHT(B2,LEN(B2)-FIND(" ",B2)), FirstFile.xlsx!Sheet1!C:C, FirstFile.xlsx!Sheet1!C:C)), "Family匹配", "未匹配"))

公式逻辑拆解:

  • 先检查当前行的Code(A列)是否非空:
    • 非空则用XLOOKUP查找FirstFile的Code列,找到标记Code匹配,否则标记Code未匹配
    • 空Code则提取当前行Name(B列)的姓氏(拆分空格后的后半部分),去FirstFile的Family列(C列)查找,找到标记Family匹配,否则标记未匹配

步骤2:设置条件格式标记绿色

选中SecondFile.xlsx中需要标记的行范围(比如A2:D[最后一行]),按以下步骤操作:

  1. 点击「开始」选项卡 → 「条件格式」→ 「新建规则」
  2. 选择「使用公式确定要设置格式的单元格」
  3. 输入公式:=OR($D2="Code匹配", $D2="Family匹配")
  4. 点击「格式」→ 「填充」→ 选择绿色 → 确定

完成后,所有匹配成功的行就会自动显示绿色填充了。


方法2:VBA宏(高效批量处理)

如果数据量较大,手动操作效率低,可以用VBA宏实现自动匹配和标记:
打开SecondFile.xlsx,按Alt+F11打开VBA编辑器,插入一个新模块,粘贴以下代码:

Sub MatchAndColorRows()
    Dim wsFirst As Worksheet, wsSecond As Worksheet
    Dim lastRowFirst As Long, lastRowSecond As Long
    Dim i As Long, j As Long
    Dim codeMatch As Boolean, familyMatch As Boolean
    
    ' 绑定两个文件的工作表
    Set wsFirst = Workbooks("FirstFile.xlsx").Sheets("Sheet1")
    Set wsSecond = ThisWorkbook.Sheets("Sheet1")
    
    ' 获取两个工作表的最后一行行号
    lastRowFirst = wsFirst.Cells(wsFirst.Rows.Count, "A").End(xlUp).Row
    lastRowSecond = wsSecond.Cells(wsSecond.Rows.Count, "A").End(xlUp).Row
    
    ' 遍历SecondFile的每一行
    For i = 2 To lastRowSecond
        codeMatch = False
        familyMatch = False
        
        ' 优先匹配Code列
        If Not IsEmpty(wsSecond.Cells(i, "A").Value) Then
            For j = 2 To lastRowFirst
                If wsSecond.Cells(i, "A").Value = wsFirst.Cells(j, "A").Value Then
                    codeMatch = True
                    Exit For
                End If
            Next j
        End If
        
        ' Code未匹配或无Code时,匹配Family列
        If Not codeMatch Then
            ' 提取Name中的姓氏(取最后一个空格后的内容)
            Dim lastName As String
            lastName = Split(wsSecond.Cells(i, "B").Value, " ")(UBound(Split(wsSecond.Cells(i, "B").Value, " ")))
            
            For j = 2 To lastRowFirst
                If lastName = wsFirst.Cells(j, "C").Value Then
                    familyMatch = True
                    Exit For
                End If
            Next j
        End If
        
        ' 匹配成功则标记绿色
        If codeMatch Or familyMatch Then
            wsSecond.Rows(i).Interior.ColorIndex = 4 ' 4为默认绿色,可根据需求调整颜色索引
        End If
    Next i
    
    MsgBox "匹配与标记完成!"
End Sub

代码说明:

  • 先遍历SecondFile的每一行,优先匹配Code列
  • 无Code或Code未匹配时,提取Name的姓氏去匹配FirstFile的Family列
  • 匹配成功的行自动设置绿色填充

运行宏前确保FirstFile.xlsx已打开,点击运行按钮即可完成批量处理。


额外提示

  • 如果SecondFile中的Name格式特殊(比如包含中间名),可以调整姓氏提取逻辑,改为取最后一个空格后的内容(代码中已做适配)
  • 若数据量超过10万行,建议将VBA代码中的嵌套循环改为字典(Dictionary)查找,能大幅提升运行效率

内容的提问来源于stack exchange,提问作者Reza Shahrestani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:48:47