Google Sheets按第二列最早日期去重 支持新增行校验的公式方法
Google Sheets 按姓名保留最早日期动态去重方案
前置说明
假设你存放原始数据的工作表名称为原始数据,表内第1行为表头(A1=姓名,B1=日期),实际数据从第2行开始,A列存姓名、B列存可识别格式的日期值。
操作步骤
打开用于存放去重结果的目标工作表,在A1、B1单元格分别输入表头「姓名」「最早对应日期」,选中A2单元格,粘贴以下公式即可自动生成全量去重结果:
=LET( valid_data, FILTER('原始数据'!A2:B, '原始数据'!A2:A<>""), name_list, INDEX(valid_data,,1), date_list, INDEX(valid_data,,2), uniq_name, UNIQUE(name_list), first_date, MAP(uniq_name, LAMBDA(x, MIN(FILTER(date_list, name_list=x)))), HSTACK(uniq_name, first_date) )
公式逻辑说明
- 自动过滤原始表中A列姓名为空的无效行,后续原始表新增行只要A列填入姓名,就会自动纳入计算范围,无需手动调整公式引用范围
- 提取原始表中所有不重复的姓名作为结果基础
- 逐一对每个不重复姓名匹配其对应的所有日期,通过
MIN函数取最早的日期值 - 最终将姓名和对应最早日期横向拼接为两列结果,自动溢出填充所有行,原始表数据更新时结果会同步自动刷新
注意事项
- 请确保原始表B列的日期为Google Sheets可识别的日期格式:若为文本格式请先选中B列,通过顶部菜单「格式-数字-日期」转换为标准日期格式,否则日期最小值计算会出错
- 如果你的原始工作表名称不是
原始数据,将公式中所有'原始数据'替换为实际的工作表名称即可,例如原表名为Sheet1则替换为'Sheet1' - 公式所在的目标工作表A、B列从第2行开始不要手动输入任何内容,否则会阻断公式的自动溢出填充,导致结果显示不全
如果你后续在原始表新增了C列及以后的关联字段,需要把对应字段同步带到去重结果中,可以将A2的公式替换为以下版本,记得把引用范围A2:B改成你实际的列范围即可:
=LET( valid_data, FILTER('原始数据'!A2:C, '原始数据'!A2:A<>""), name_list, INDEX(valid_data,,1), date_list, INDEX(valid_data,,2), uniq_name, UNIQUE(name_list), FILTER(valid_data, COUNTIFS(uniq_name, name_list, date_list, "<"&date_list)=0) )这个版本会自动保留每个姓名对应最早日期的整行数据,支持任意多列关联字段同步。
内容的提问来源于stack exchange,提问作者JJpajama
相关产品推荐
相关产品推荐

