Google Sheets如何输出/引用指定月份范围内最底部单元格的值
Google Sheets按月份/年份筛选取时间段最后一个单元格值解决方案
原公式失效原因
- 仅按月份筛选的公式错误点:你使用
ROWS(FILTER(History!Q2500:Q, NOT(ISBLANK(History!Q2500:Q))))计算的是整个Q列从2500行开始的所有非空单元格总数,并非指定月份筛选结果的行数。7月作为最近月份,筛选结果的最后一行刚好是全列最后一个非空行,因此公式碰巧生效,切换到更早月份时筛选结果长度小于这个行数,INDEX索引越界就会报错。 - 加年份筛选的公式错误点:
MATCH(143^143,HISTORY!$B:B)是匹配整个B列的最后一个数值位置,和前面按年月筛选出的结果数组没有关联,索引完全不对应,因此无法正常运行。同时你原来的year($B$2&1)写法存在逻辑问题,拼接出来的字符串无法正确转换为对应年份的日期。
修正方案
仅按月份筛选版本
逻辑:先筛选出指定月份的非空值,按日期倒序排序后直接取第一个结果,无需计算行数,兼容性更强。
=INDEX(SORT(FILTER(History!Q2500:Q, MONTH(History!A2500:A)=MONTH(C25&1), NOT(ISBLANK(History!Q2500:Q)) ), History!A2500:A, FALSE), 1)
替换C25为你存放月份缩写(JUN/JUL等)的单元格即可直接使用。
支持年份+月份筛选版本
假设$B$2存放纯年份数字(如2024),B4存放月份缩写,公式如下:
=INDEX(SORT(FILTER(History!B:B, MONTH(History!A:A)=MONTH(B4&1), YEAR(History!A:A)=$B$2, NOT(ISBLANK(History!B:B)) ), History!A:A, FALSE), 1)
如果你的日期列不是按升序排列,可以把排序依据改为行号,确保取到的是符合条件的最后一行数据:
=INDEX(SORT(FILTER(History!B:B, MONTH(History!A:A)=MONTH(B4&1), YEAR(History!A:A)=$B$2, NOT(ISBLANK(History!B:B)) ), ROW(History!A:A), FALSE), 1)
额外优化建议
可以用IFERROR包裹公式,避免对应时间段无数据时返回错误值:
=IFERROR(INDEX(SORT(FILTER(History!Q2500:Q, MONTH(History!A2500:A)=MONTH(C25&1), NOT(ISBLANK(History!Q2500:Q)) ), History!A2500:A, FALSE), 1), "无匹配数据")
内容的提问来源于stack exchange,提问作者Verminous
相关产品推荐
相关产品推荐

