Excel中基于单元格内容匹配行并复制对应单元格数据的解决方案求助
解决Excel重复ID空值批量填充问题
方法1:用Excel内置函数快速处理
无需写代码,适合快速完成操作:
- 在表格右侧新增空白列(比如D列),在D2单元格输入公式:
该公式会根据当前行Col.A的ID,在整列中匹配对应行的非空Col.B数据,无匹配则返回空。=XLOOKUP(A2, A:A, B:B, "", 0) - 同理,在E2单元格输入公式填充Col.C:
=XLOOKUP(A2, A:A, C:C, "", 0) - 选中D2、E2单元格,下拉填充至所有行,此时D、E列会自动匹配对应ID的B、C值。
- 选中D、E列右键复制,再选中B、C列右键选择「粘贴为数值」,完成后删除D、E列即可。
注:旧版Excel无XLOOKUP功能时,可替换为VLOOKUP:
=IFERROR(VLOOKUP(A2, A:B, 2, FALSE), "")
方法2:VBA脚本批量处理
适合需要重复执行的场景,一键完成填充:
- 打开目标Excel文件,按
Alt + F11打开VBA编辑器。 - 右键当前工作簿,选择「插入」→「模块」。
- 粘贴以下代码:
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 - 按
F5运行脚本,完成后会弹出提示。
方法3:JavaScript(Node.js)处理(适合前端开发者)
用熟悉的JS结合xlsx库处理,步骤如下:
- 新建文件夹,初始化项目:
npm init -y npm install xlsx - 创建
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('数据填充完成!'); - 修改代码中的
你的文件路径.xlsx为实际文件路径,运行脚本:node fillExcel.js
内容的提问来源于stack exchange,提问作者Eduard
相关产品推荐
相关产品推荐

