Excel批量填充重复ID对应Area:空白B列匹配同ID非空值
解决方案:填充重复ID对应的空白Area值
公式法
1. 通用数组公式(兼容所有Excel版本)
你之前的公式存在单元格引用不匹配(B1对应A1但公式用了A2)、整列引用导致计算效率低的问题,修正后公式如下:
=IF(B1="", INDEX($B$1:$B$8, MATCH(TRUE, ($A$1:$A$8=A1)*($B$1:$B$8<>""), 0)), B1)
- 替换
$B$1:$B$8和$A$1:$A$8为你实际的数据范围,避免全列引用卡顿 - 输入公式后按Ctrl+Shift+Enter确认(Excel 365/2021版本直接回车即可)
- 下拉公式至所有行
2. Excel 365/2021 动态数组公式(更简洁)
利用XLOOKUP自动匹配对应ID的非空Area值,无需下拉填充:
=XLOOKUP(A:A, A:A, B:B, "", 0, 1)
或者用BYROW批量处理:
=BYROW(A:A, LAMBDA(x, XLOOKUP(x, A:A, B:B, "", 0, 1)))
3. LOOKUP简化公式
=IF(B1<>"", B1, LOOKUP(2, 1/($A$1:$A$8=A1)/($B$1:$B$8<>""), $B$1:$B$8))
该公式通过LOOKUP特性自动定位对应ID的最后一个非空Area值,下拉填充即可。
Power Query 可视化处理(无需公式)
适合不擅长公式的用户:
- 选中数据区域,点击「数据」→「从表格/区域」(Excel 2016及以上版本)
- 在Power Query编辑器中:
- 选中A列,点击「转换」→「分组依据」,分组列选A列,新列名设为
Area,操作选择「最大值」(文本的最大值即为非空值) - 关闭并上载分组后的表格,将结果与原表格匹配,或直接用分组结果替换原数据
- 选中A列,点击「转换」→「分组依据」,分组列选A列,新列名设为
VBA 批量宏处理(大数量数据高效)
如果数据量较大,用宏批量处理更高效:
Sub FillArea() Dim ws As Worksheet Dim lastRow As Long Dim idDict As Object Dim i As Long Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set idDict = CreateObject("Scripting.Dictionary") ' 先存储每个ID对应的Area值 For i = 1 To lastRow If ws.Cells(i, "A").Value <> "" And ws.Cells(i, "B").Value <> "" Then idDict(ws.Cells(i, "A").Value) = ws.Cells(i, "B").Value End If Next i ' 填充空白单元格 For i = 1 To lastRow If ws.Cells(i, "B").Value = "" Then ws.Cells(i, "B").Value = idDict(ws.Cells(i, "A").Value) End If Next i Set idDict = Nothing End Sub
使用步骤:
- 按
Alt+F11打开VBA编辑器 - 插入模块,粘贴上述代码
- 返回Excel,按
Alt+F8运行FillArea宏
内容的提问来源于stack exchange,提问作者Princess Sparkle Bum
相关产品推荐
相关产品推荐

