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

Excel VBA需求:筛选Core中Partial缺失的C_Number行并导出

VBA实现筛选Core中缺失于Partial的C_Number行并去重导出

实现思路

  1. 用字典存储Partial里的所有C_Number(自动去重,同时统一格式避免数字/文本不匹配)
  2. 遍历Core的C_Number,找出不在字典中的条目
  3. 将对应整行复制到新工作簿,同时确保新工作簿里的C_Number无重复
  4. 自动调整新工作簿列宽,完成后提示并关闭源文件(可选)

完整代码(带详细注释)

Sub FindMissingCNumbers()
    Dim wbkCore As Workbook, wbkPartial As Workbook, wbkMissing As Workbook
    Dim wsCore As Worksheet, wsPartial As Worksheet, wsMissing As Worksheet
    Dim coreLastRow As Long, partialLastRow As Long, i As Long, destRow As Long
    Dim cNumDict As Object
    Dim cNumber As Variant
    
    ' 创建字典:存储Partial的C_Number,自动去重,查找速度快
    Set cNumDict = CreateObject("Scripting.Dictionary")
    
    ' -------------------------- 替换成你的实际文件路径 --------------------------
    Set wbkCore = Workbooks.Open("C:\YourFolder\Core.xlsx") ' Core文件路径
    Set wbkPartial = Workbooks.Open("C:\YourFolder\Partial.xlsx") ' Partial文件路径
    ' -------------------------------------------------------------------------
    
    ' 绑定工作表(假设两个文件的目标工作表都是第一个)
    Set wsCore = wbkCore.Sheets(1)
    Set wsPartial = wbkPartial.Sheets(1)
    
    ' 遍历Partial的F列,把C_Number转成文本存入字典(避免数字/文本格式差异)
    partialLastRow = wsPartial.Cells(Rows.Count, "F").End(xlUp).Row
    For i = 2 To partialLastRow ' 假设第1行是表头,从第2行开始遍历数据
        cNumber = Trim(Str(wsPartial.Cells(i, "F").Value)) ' 转文本+去空格
        If Not cNumDict.Exists(cNumber) Then
            cNumDict.Add cNumber, 1 ' 只存不重复的条目
        End If
    Next i
    
    ' 创建新工作簿,用于存放缺失的行
    Set wbkMissing = Workbooks.Add
    Set wsMissing = wbkMissing.Sheets(1)
    wsMissing.Name = "MissingEntries"
    destRow = 1 ' 新工作簿的起始行
    
    ' 先复制Core的表头到新工作簿
    wsCore.Range("A1:P1").Copy Destination:=wsMissing.Cells(destRow, 1)
    destRow = destRow + 1 ' 表头占了1行,数据从第2行开始
    
    ' 遍历Core的E列,查找缺失的C_Number
    coreLastRow = wsCore.Cells(Rows.Count, "E").End(xlUp).Row
    For i = 2 To coreLastRow
        cNumber = Trim(Str(wsCore.Cells(i, "E").Value)) ' 同样转文本匹配字典
        
        ' 两个判断:1. 不在Partial的字典里;2. 新工作簿里还没加过这个C_Number(去重)
        If Not cNumDict.Exists(cNumber) And _
           wsMissing.Columns(5).Find(cNumber, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then
            
            ' 复制当前行的A-P列到新工作簿
            wsCore.Range("A" & i & ":P" & i).Copy Destination:=wsMissing.Cells(destRow, 1)
            destRow = destRow + 1 ' 下一行准备存新数据
        End If
    Next i
    
    ' 自动调整新工作簿的列宽,方便查看
    wsMissing.Columns.AutoFit
    
    ' 弹出提示框告知完成
    MsgBox "缺失的C_Number条目已导出到新工作簿!", vbInformation
    
    ' 关闭源工作簿(如果不需要保留打开状态,SaveChanges设为False不保存)
    wbkCore.Close SaveChanges:=False
    wbkPartial.Close SaveChanges:=False
End Sub

使用说明

  1. 打开Excel,按Alt+F11打开VBA编辑器
  2. 插入一个新模块(右键左侧项目窗口 -> 插入 -> 模块)
  3. 把上面的代码粘贴进去
  4. 替换代码里的文件路径为你实际的Core和Partial文件路径
  5. 按F5运行代码,或者回到Excel界面开发工具里点击运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:42:34