如何在Google Sheets中筛选Interval列并保留Page列首次出现值?
问题描述
现有如下表格数据:
| 序号 | 日期 | Page | Interval |
|---|---|---|---|
| 1# Day | Day 1 | 1 | Day 1 - Pg. 1 |
| 2# Day | Day 2 | 2 | Day 2 - Pg. 2 |
| 3# Day | Day 3 | 3 | Day 3 - Pg. 3 of 2 |
| 4# Day | Day 4 | 3 | Day 4 - Pg. 3 of 2 |
| 5# Day | Day 5 | 3 | Day 5 - Pg. 3 of 2 |
| 6# Day | Day 6 | 3 | Day 6 - Pg. 3 of 2 |
| 7# Day | Day 7 | 3 | Day 7 - Pg. 3 of 2 |
| 8# Day | Day 8 | 3 | Day 8 - Pg. 3 of 2 |
| 9# Day | Day 9 | 3 | Day 9 - Pg. 3 of 2 |
| 10# Day | Day 10 | 3 | Day 10 - Pg. 3 of 2 |
| 11# Day | Day 11 | 3 | Day 11 - Pg. 3 of 2 |
| 12# Day | Day 12 | 3 | Day 12 - Pg. 3 of 2 |
| 13# Day | Day 13 | 3 | Day 13 - Pg. 3 of 2 |
| 14# Day | Day 14 | 3 | Day 14 - Pg. 3 of 2 |
| 15# Day | Day 15 | 3 | Day 15 - Pg. 3 of 2 |
| 16# Day | Day 16 | 2 | Day 16 - Pg. 2 |
| 17# Day | Day 17 | 2 | Day 17 - Pg. 2 |
| 18# Day | Day 18 | 2 | Day 18 - Pg. 2 |
| 19# Day | Day 19 | 2 | Day 19 - Pg. 2 |
| 20# Day | Day 20 | 2 | Day 20 - Pg. 2 |
需求:使用FILTER函数筛选Interval列,仅保留Page列中每个值的首次出现记录,预期结果为:
Day 1 - Pg. 1
Day 2 - Pg. 2
当前使用公式FILTER(Interval,Page<=2)得到的结果不符合预期,返回了所有Page≤2的记录,而非每个Page值的首次出现。
解决方案
要实现仅保留每个Page值的首次出现,需结合FILTER与MATCH函数标记首次出现的行,具体公式如下:
结构化表格版本
如果数据是Excel结构化表格(带表头),使用:
=FILTER(Interval, MATCH(Page, Page, 0) = ROW(Page) - ROW(Page[#Headers]))
普通单元格区域版本
若数据在普通单元格区域(例如Page列是C2:C21,Interval列是D2:D21),使用:
=FILTER(D2:D21, MATCH(C2:C21, C2:C21, 0) = ROW(C2:C21) - ROW(C2) + 1)
公式说明
MATCH(Page, Page, 0):对每一行的Page值,返回它在整个Page列中第一次出现的相对行号ROW(Page) - ROW(Page[#Headers]):计算当前行在数据区域内的起始行号(从1开始)- 当两者相等时,说明该行是对应Page值的首次出现,
FILTER会保留该行的Interval内容
仅保留Page≤2的首次出现
如果只需要筛选Page≤2的首次出现记录,在条件中增加额外筛选即可:
=FILTER(Interval, (MATCH(Page, Page, 0) = ROW(Page) - ROW(Page[#Headers])) * (Page <= 2))
执行后将得到预期结果:
Day 1 - Pg. 1
Day 2 - Pg. 2
内容的提问来源于stack exchange,提问作者Bruno Silva
相关产品推荐
相关产品推荐

