如何修改Google Sheets公式以返回相同ID的最后输入条目?
问题与解决方案
原始数据
| ID | 体重(kg) | BMI | 体脂率 | 内脏脂肪 |
|---|---|---|---|---|
| 248 | 54.1 | 20.5 | 19.7 | 7 |
| 248 | 54.3 | 20.2 | 19.5 | 6 |
| 248 | 54.2 | 20.4 | 19.6 | 6 |
初始使用公式
=ARRAYFORMULA(IF(LEN(I3:I), IFERROR(VLOOKUP(I3:I, SORT(FILTER({B3:B, D3:D, E3:E, F3:F, G3:G}, LEN(B3:B)), 1, FALSE), {2, 3, 4, 5}, FALSE), ""), ""))
当前返回结果
| ID | 体重(kg) | BMI | 体脂率 | 内脏脂肪 |
|---|---|---|---|---|
| 248 | 54.1 | 20.5 | 19.7 | 7 |
由于所有条目ID相同,调整公式中SORT(...,1,TRUE)的排序方向参数无法改变返回结果。
尝试的MAX函数公式
=ARRAYFORMULA(IF(LEN(I3:I), IFERROR(VLOOKUP(I3:I, FILTER({B3:B, D3:D, E3:E, F3:F, G3:G}, ROW(B3:B) = MAX(FILTER(ROW(B3:B), B3:B = I3:I))), {2, 3, 4, 5}, FALSE), ""), ""))
该公式仅返回全局行号最大的条目,无法针对每个ID匹配其对应最大行号的记录。
目标结果
需返回ID对应的最后一条(行号最大)的记录:
| ID | 体重(kg) | BMI | 体脂率 | 内脏脂肪 |
|---|---|---|---|---|
| 248 | 54.2 | 20.4 | 19.6 | 6 |
可行解决方案
方法1:使用QUERY函数实现
=ARRAYFORMULA(IF(LEN(I3:I), IFERROR(QUERY({B3:B, ROW(B3:B), D3:G}, "select Col1, Col3, Col4, Col5, Col6 where Col1 = '"&I3:I&"' order by Col2 desc limit 1", 0), ""), ""))
逻辑说明:给原始数据附加行号列,按行号降序排序后,取每组ID的第一条记录,即为该ID对应的最后一条数据。
方法2:改进VLOOKUP数组公式
=ARRAYFORMULA(IF(LEN(I3:I), IFERROR(VLOOKUP(I3:I&MAX(ROW(B3:B)*(B3:B=I3:I)), {B3:B&ROW(B3:B), D3:G}, {2,3,4,5}, 0), ""), ""))
逻辑说明:将ID与对应行号拼接成唯一匹配键,通过VLOOKUP定位ID+最大行号的组合,从而精准获取目标记录。
内容的提问来源于stack exchange,提问作者Ricardo Wu
相关产品推荐
相关产品推荐

