如何汇总Google Sheets中某值最后3次出现的行数据?
问题需求
我有一个从A:BL区域扩展的表格(仅按行增长),需要查找D列中“English”的最后3次出现,并对对应E:BL区域的这3行数据进行汇总,返回一行汇总结果。
简化数据集
| 语言 | 《玫瑰》 | 《白鲸记》 | 《远大前程》 | 《手枪》 |
|---|---|---|---|---|
| English | 3 | 1 | 2 | |
| English | 3 | 2 | ||
| English | 1 | 1 | 2 | 2 |
| French | 3 | 2 | ||
| English | 3 | 2 | 2 |
需要汇总的目标行
这是D列中“English”的最后3次出现对应的行:
| 语言 | 《玫瑰》 | 《白鲸记》 | 《远大前程》 | 《手枪》 |
|---|---|---|---|---|
| English | 3 | 2 | ||
| English | 1 | 1 | 2 | 2 |
| English | 3 | 2 | 2 |
期望汇总结果
| 语言 | 《玫瑰》 | 《白鲸记》 | 《远大前程》 | 《手枪》 |
|---|---|---|---|---|
| English | 7 | 1 | 4 | 6 |
之前尝试的公式无效:=XLOOKUP(SEQUENCE(3), ROW(D2:D), INDEX(FILTER(E2:BL, D2:D="English"), ), , -1)
解决方案
以下是无需脚本的Google Sheets公式方案:
方案1:简洁的BYCOL+FILTER+TAKE组合
={"English"; BYCOL(FILTER(E:BL, D:D="English"), LAMBDA(col, SUM(TAKE(col, -3))))}
- 逻辑:先用
FILTER(E:BL, D:D="English")提取所有D列为“English”对应的数值区域;再用BYCOL遍历每一列,对每一列执行SUM(TAKE(col, -3)),即取该列最后3个值求和;最后用数组常量{"English"; ...}添加第一列的“English”标签。
方案2:QUERY嵌套实现
=QUERY( QUERY(FILTER(A:BL, D:D="English"), "select * offset "&(COUNTIF(D:D,"English")-3)), "select Col1, sum(Col2), sum(Col3), sum(Col4), sum(Col5) label sum(Col2)'《玫瑰》', sum(Col3)'《白鲸记》', sum(Col4)'《远大前程》', sum(Col5)'《手枪》'" )
- 逻辑:
- 内层
QUERY:先过滤出所有D列为“English”的行,再用offset "&(COUNTIF(D:D,"English")-3)"跳过前面的行,仅保留最后3行; - 外层
QUERY:对保留的3行按列求和,并设置对应列的标签,匹配原表格表头。
- 内层
方案3:SUM+INDEX组合(适合固定列数场景)
={ "English", SUM(INDEX(FILTER(E:BL,D:D="English"),COUNTIF(D:D,"English")-2,1):INDEX(FILTER(E:BL,D:D="English"),COUNTIF(D:D,"English"),1)), SUM(INDEX(FILTER(E:BL,D:D="English"),COUNTIF(D:D,"English")-2,2):INDEX(FILTER(E:BL,D:D="English"),COUNTIF(D:D,"English"),2)), SUM(INDEX(FILTER(E:BL,D:D="English"),COUNTIF(D:D,"English")-2,3):INDEX(FILTER(E:BL,D:D="English"),COUNTIF(D:D,"English"),3)), SUM(INDEX(FILTER(E:BL,D:D="English"),COUNTIF(D:D,"English")-2,4):INDEX(FILTER(E:BL,D:D="English"),COUNTIF(D:D,"English"),4)) }
- 逻辑:通过
FILTER提取目标区域,用INDEX定位每一列最后3行的起始和结束位置,再用SUM求和,最后组合成完整的汇总行。
内容的提问来源于stack exchange,提问作者Keith Bryant
相关产品推荐
相关产品推荐

