如何将一列新增数据复制到另一列末尾,优先复制唯一新增数据
实现A列新增数据复制到目标列的两种方案
一、仅复制新增的唯一数据(理想方案)
方法1:动态数组公式(Excel 365/2021适用)
假设目标列为C列,在C2单元格输入以下公式,按回车后会自动生成所有A列中未在C列出现过的唯一值:
=UNIQUE(FILTER(A:A,ISNA(XLOOKUP(A:A,C:C,A:A,""))))
公式说明:
XLOOKUP(A:A,C:C,A:A,""):检查A列每个值是否已存在于C列,不存在则返回空值ISNA(...):将不存在的标记为TRUEFILTER(A:A,...):筛选出A列中未在C列出现的内容UNIQUE(...):确保最终结果为唯一值
方法2:辅助列+筛选(旧版Excel适用)
- 在B列(辅助列)的B1单元格输入公式:
=COUNTIF(C:C,A1)=0,下拉填充至A列数据末尾 - 筛选B列中值为
TRUE的行,这些行对应A列的内容就是C列没有的新增数据 - 复制筛选后的A列内容,粘贴到C列的最后一个空单元格
- 选中C列,点击「数据」→「删除重复值」完成去重
方法3:VBA自动化脚本
如果需要批量重复操作,可以用以下VBA宏:
Sub CopyNewUniqueData() Dim sourceCol As Range, targetCol As Range Dim cell As Range, exists As Boolean '定义A列数据区域(从A2开始,跳过表头) Set sourceCol = Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row) '定义C列已有数据区域 Set targetCol = Range("C2:C" & Cells(Rows.Count, "C").End(xlUp).Row) For Each cell In sourceCol exists = False '检查当前值是否在目标列已存在 On Error Resume Next exists = Not IsError(Application.Match(cell.Value, targetCol, 0)) On Error GoTo 0 If Not exists Then '复制到目标列末尾 Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Value = cell.Value '更新目标列区域 Set targetCol = Range("C2:C" & Cells(Rows.Count, "C").End(xlUp).Row) End If Next cell End Sub
使用方法:按Alt+F11打开VBA编辑器,插入模块后粘贴代码,运行宏即可自动完成新增唯一值的复制。
二、直接复制所有新增数据(后续自行去重)
如果不需要实时筛选唯一值,可直接复制后再处理:
- 选中A列中所有新增的数据(从上次复制的结束行到最新数据行)
- 右键复制,选中目标列的最后一个空单元格右键粘贴
- 后续去重:选中目标列,点击「数据」选项卡→「删除重复值」,按提示完成操作
内容的提问来源于stack exchange,提问作者Lalaland
相关产品推荐
相关产品推荐

