如何用Google Apps Script提取Google Sheets指定列唯一数据及对应最新日期值
解决Google Sheets提取唯一值并保留最新日期对应行的问题
我明白你需要处理一个35列、千行级的表格,核心需求是按第5列去重,同时保留每个唯一值对应的最新日期(第4列)的完整行数据。下面给你两种实用的方法,都是Google Sheets原生函数,不需要脚本:
方法一:用SORT+SORTN一键生成结果(推荐,操作简单)
这个方法通过先排序再筛选分组,直接输出最终结果,适合快速处理:
在新工作表的A1单元格输入以下公式,记得把'原工作表名称'替换成你实际的源表名称(比如'Sheet1'):
=SORTN(SORT('原工作表名称'!A1:AI1000, 4, FALSE, 5, TRUE), 9^9, 2, 5, TRUE)
参数解释:
SORT('原工作表名称'!A1:AI1000, 4, FALSE, 5, TRUE):先对源数据排序——按第4列(日期)降序(保证每个分组里最新日期的行排在最前面),再按第5列升序(方便后续分组)。SORTN(..., 9^9, 2, 5, TRUE):对排序后的结果进行分组筛选——9^9表示取足够多的行(覆盖你的千行数据),2表示按第5列分组,每组只保留1行,最后按第5列排序输出。
方法二:分步构建(适合需要单独查看中间结果的场景)
如果你需要更清晰地看到每个步骤的结果,可以分三步操作:
- 提取第5列的唯一值
在新工作表的A1单元格输入:
=UNIQUE('原工作表名称'!E:E) // E列对应第5列,根据实际列调整
- 获取每个唯一值对应的最新日期
在新工作表的B1单元格输入,然后向下拖曳填充:
=MAXIFS('原工作表名称'!D:D, '原工作表名称'!E:E, A1) // D列对应第4列日期
- 匹配对应完整行的数据
在新工作表的C1单元格输入(对应源表的A列),然后向右、向下拖曳填充到所有列:
=INDEX('原工作表名称'!A:A, MATCH(1, ('原工作表名称'!E:E=A1)*('原工作表名称'!D:D=B1), 0))
提示:如果拖曳时公式引用出错,可以用绝对引用锁定源表范围,比如把
'原工作表名称'!E:E改成'原工作表名称'!$E:$E。
注意事项:
- 如果你的数据是动态更新的,可以把公式里的固定范围
A1:AI1000改成动态范围,比如A:AI,但大范围引用可能会影响表格性能,建议用实际数据的边界范围。 - 如果第5列有空白值,UNIQUE函数会保留空白,你可以用
FILTER先去掉空白行,比如=UNIQUE(FILTER('原工作表名称'!E:E, '原工作表名称'!E:E<>""))。
内容的提问来源于stack exchange,提问作者J.Doe
相关产品推荐
相关产品推荐

