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

Excel中基于单元格内容匹配行并复制对应单元格数据的解决方案求助

解决Excel重复ID空值批量填充问题

方法1:用Excel内置函数快速处理

无需写代码,适合快速完成操作:

  1. 在表格右侧新增空白列(比如D列),在D2单元格输入公式:
    =XLOOKUP(A2, A:A, B:B, "", 0)
    
    该公式会根据当前行Col.A的ID,在整列中匹配对应行的非空Col.B数据,无匹配则返回空。
  2. 同理,在E2单元格输入公式填充Col.C:
    =XLOOKUP(A2, A:A, C:C, "", 0)
    
  3. 选中D2、E2单元格,下拉填充至所有行,此时D、E列会自动匹配对应ID的B、C值。
  4. 选中D、E列右键复制,再选中B、C列右键选择「粘贴为数值」,完成后删除D、E列即可。

注:旧版Excel无XLOOKUP功能时,可替换为VLOOKUP:

=IFERROR(VLOOKUP(A2, A:B, 2, FALSE), "")

方法2:VBA脚本批量处理

适合需要重复执行的场景,一键完成填充:

  1. 打开目标Excel文件,按Alt + F11打开VBA编辑器。
  2. 右键当前工作簿,选择「插入」→「模块」。
  3. 粘贴以下代码:
    Sub FillEmptyColumns()
        Dim idDict As Object
        Dim ws As Worksheet
        Dim lastRow As Long
        Dim i As Long
        
        Set idDict = CreateObject("Scripting.Dictionary")
        Set ws = ActiveSheet
        lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        
        ' 先记录每个ID对应的非空B、C值
        For i = 1 To lastRow
            Dim id As String
            id = Trim(ws.Cells(i, "A").Value)
            If id <> "" And ws.Cells(i, "B").Value <> "" Then
                idDict(id) = Array(ws.Cells(i, "B").Value, ws.Cells(i, "C").Value)
            End If
        Next i
        
        ' 遍历填充空值行
        For i = 1 To lastRow
            Dim currentId As String
            currentId = Trim(ws.Cells(i, "A").Value)
            If currentId <> "" And ws.Cells(i, "B").Value = "" Then
                If idDict.Exists(currentId) Then
                    ws.Cells(i, "B").Value = idDict(currentId)(0)
                    ws.Cells(i, "C").Value = idDict(currentId)(1)
                End If
            End If
        Next i
        
        Set idDict = Nothing
        Set ws = Nothing
        MsgBox "填充完成!"
    End Sub
    
  4. 按F5运行脚本,完成后会弹出提示。

方法3:JavaScript(Node.js)处理(适合前端开发者)

用熟悉的JS结合xlsx库处理,步骤如下:

  1. 新建文件夹,初始化项目:
    npm init -y
    npm install xlsx
    
  2. 创建fillExcel.js文件,粘贴以下代码:
    const XLSX = require('xlsx');
    
    // 读取目标Excel文件
    const workbook = XLSX.readFile('你的文件路径.xlsx');
    const sheetName = workbook.SheetNames[0];
    const worksheet = workbook.Sheets[sheetName];
    const data = XLSX.utils.sheet_to_json(worksheet, { header: ['TABLE', 'ColA', 'ColB', 'ColC'] });
    
    // 构建ID到B、C值的映射表
    const idMap = {};
    data.forEach(row => {
        if (row.ColA && row.ColB) {
            idMap[row.ColA] = { ColB: row.ColB, ColC: row.ColC };
        }
    });
    
    // 批量填充空值
    const filledData = data.map(row => {
        if (row.ColA && !row.ColB && idMap[row.ColA]) {
            return { ...row, ...idMap[row.ColA] };
        }
        return row;
    });
    
    // 将处理后的数据写入新Excel文件
    const newWorksheet = XLSX.utils.json_to_sheet(filledData);
    workbook.Sheets[sheetName] = newWorksheet;
    XLSX.writeFile(workbook, '处理完成的文件.xlsx');
    
    console.log('数据填充完成!');
    
  3. 修改代码中的你的文件路径.xlsx为实际文件路径,运行脚本:
    node fillExcel.js
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:32:45