如何用服务表数据替换库存表部分值?非VLOOKUP批量填充场景
嘿,我懂这种手动调整到崩溃的感觉——数据量上来之后,重复操作真的能把人熬疯!既然你已经明确这不是简单的VLOOKUP下拉能解决的,而且两张表结构还不一样,那咱们直接针对你的需求来搞方案:
方案1:用Power Query(零代码,适合快速处理)
Power Query天生就是用来处理这种异构数据合并的场景,不用写复杂代码,可视化操作就能搞定:
- 第一步:把库存表和服务表都导入Power Query
点击「数据」选项卡 → 「从表格/范围」,分别导入两张表,Power Query编辑器会自动打开 - 第二步:整理服务表的字段
只保留你需要补到库存表的字段(比如采购订单号、服务项名称、采购金额这些),删掉无关列;如果字段格式不统一(比如PO号是文本/数字),统一格式 - 第三步:合并两张表
在库存表的查询编辑器里,点击「合并查询」→ 「合并查询作为新查询」,选择服务表作为合并对象,然后选共同匹配键(比如采购订单号,这是两张表唯一能对应起来的字段),合并类型选「左外部」(保证库存表的所有记录都保留,匹配不到的留空) - 第四步:展开合并的服务表字段
点击合并列旁边的箭头,选择你需要的服务表字段,展开后就能把服务表的数据补到库存表对应的行里 - 第五步:加载回Excel
调整好数据后,点击「关闭并上载」,就能得到合并后的完整表,以后只要刷新数据,就能自动同步最新的库存和服务数据
方案2:用VBA自定义遍历逻辑(完全匹配你的伪代码思路)
如果你更倾向于用代码实现遍历逻辑,那VBA完全能满足你的需求,下面是一个基础的示例框架,你可以根据自己的表结构修改:
Sub MergeInventoryAndService() Dim wsInventory As Worksheet, wsService As Worksheet Dim lastRowInv As Long, lastRowServ As Long Dim i As Long, j As Long Dim matchKey As String ' 比如采购订单号作为匹配键 ' 定义两张表的工作表(改成你实际的表名) Set wsInventory = ThisWorkbook.Worksheets("库存表") Set wsService = ThisWorkbook.Worksheets("服务表") ' 获取两张表的最后一行 lastRowInv = wsInventory.Cells(Rows.Count, "A").End(xlUp).Row ' 假设A列是匹配键列 lastRowServ = wsService.Cells(Rows.Count, "A").End(xlUp).Row ' 遍历库存表的每一条记录 For i = 2 To lastRowInv ' 从第2行开始,假设第1行是表头 matchKey = wsInventory.Cells(i, "A").Value ' 在服务表中查找匹配的记录 For j = 2 To lastRowServ If wsService.Cells(j, "A").Value = matchKey Then ' 把服务表的字段写入库存表(改成你实际需要的列) wsInventory.Cells(i, "D").Value = wsService.Cells(j, "B").Value ' 比如服务名称 wsInventory.Cells(i, "E").Value = wsService.Cells(j, "C").Value ' 比如服务金额 Exit For ' 找到匹配项后退出内层循环,避免重复匹配 End If Next j Next i MsgBox "数据合并完成!" End Sub
使用注意事项:
- 先备份你的数据再运行代码!
- 把代码里的表名、列号(比如"A"、"D")改成你实际的结构
- 如果匹配键可能重复,需要额外处理(比如累加金额或者标记重复项)
不管选哪种方案,建议先拿一小部分数据测试,确认逻辑没问题再跑全量数据,避免出问题。
内容的提问来源于stack exchange,提问作者Andrew M
相关产品推荐
相关产品推荐

