Excel中通过对比两个工作表数据填充第三个工作表的实现方法咨询
Excel中通过对比两个工作表数据填充第三个工作表的实现方法咨询
嘿,别担心!刚接触Excel遇到这种需求太正常了,完全不是什么 trivial 的事儿~我给你分享几个实用的方法,帮你把这个重复工作自动化,省出不少时间!
方法一:用Excel公式快速实现(适合手动操作,无需编程)
如果你的Excel是365或2021版本,FILTER函数是最方便的选择:
假设你要对比的是Sheet1和Sheet2的A列数据,想把Sheet2里没在Sheet1出现的内容放到Sheet3里,直接在Sheet3的A1单元格输入:
=FILTER(Sheet2!A:A, COUNTIF(Sheet1!A:A, Sheet2!A:A)=0, "无匹配差异数据")
- 解释一下:
FILTER会筛选Sheet2的A列数据,COUNTIF用来统计Sheet1里是否存在当前值,等于0就代表没找到,最后如果没有差异数据会显示"无匹配差异数据"。
如果是旧版Excel(不支持FILTER),可以用数组公式:
在Sheet3的A1输入:
=INDEX(Sheet2!A:A, SMALL(IF(COUNTIF(Sheet1!A:A, Sheet2!A:A)=0, ROW(Sheet2!A:A)), ROW(A1)))
输入完后按 Ctrl+Shift+Enter 触发数组公式,然后下拉填充直到出现#NUM!就可以停止啦。
小提示:如果数据里有多余空格或大小写不一致导致判断错误,可以用
TRIM函数处理,比如把公式里的Sheet2!A:A改成TRIM(Sheet2!A:A),Sheet1!A:A改成TRIM(Sheet1!A:A)。
方法二:用VBA宏自动化重复操作(适合频繁使用的场景)
如果你需要经常做这个对比,写个简单的宏可以一键搞定:
- 按
Alt+F11打开VBA编辑器 - 右键点击左侧的工作簿名称,选择「插入」→「模块」
- 把下面的代码粘贴进去:
Sub CompareAndPopulate() Dim wsSource As Worksheet, wsCompare As Worksheet, wsResult As Worksheet Dim compareRange As Range, cell As Range Dim isFound As Boolean ' 替换成你的工作表名称,如果不是Sheet1/2/3的话 Set wsSource = ThisWorkbook.Sheets("Sheet2") ' 要提取数据的表 Set wsCompare = ThisWorkbook.Sheets("Sheet1") ' 用来对比的表 Set wsResult = ThisWorkbook.Sheets("Sheet3") ' 结果存放的表 ' 先清空结果表的内容 wsResult.Cells.Clear ' 获取Sheet2里A列的所有非空数据 Set compareRange = wsSource.Range("A1:A" & wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row) ' 遍历Sheet2的每个单元格,对比Sheet1 For Each cell In compareRange isFound = False ' 在Sheet1的A列精确查找当前值 If Not wsCompare.Range("A:A").Find(cell.Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then isFound = True End If ' 如果没找到,就把值复制到Sheet3 If Not isFound Then wsResult.Cells(wsResult.Rows.Count, "A").End(xlUp).Offset(1, 0).Value = cell.Value End If Next cell MsgBox "对比完成!差异数据已经填充到Sheet3啦~" End Sub
- 修改代码里的工作表名称(如果你的表不是默认的Sheet1/2/3),然后按F5运行宏,或者回到Excel界面,通过「开发工具」→「宏」来运行。
备注:内容来源于stack exchange,提问作者Luxray24




