大家好,我是你们的Excel老友——阿秋

要找出“每个月最后一天”,本质上是在做三件事:
1、识别月份:把所有的日期转换成对应的月份(1月、2月……)。
2、找出每个月的“最后一个”:对于1月来说,最后一天可能是1月31日(当然也可能是1月30日,倘若31号无销售数据的话);对于2月来说,可能是2月28日。我们需要找到每个月中,日期值最大的最后那一条记录。
3、把对应的整行数据拿回来:找到了行号,就把这行的所有列都提取出来。
二、公式实战
已知源数据区域为 A2:D65
MONTH(B2:B65)UNIQUE(MONTH(B2:B65))
MATCH(UNIQUE(MONTH(B2:B65)),MONTH(B2:B65))
⚠️ 日期如果没排序会用错结果,这是最容易踩的坑
=CHOOSEROWS(A2:D65,MATCH(UNIQUE(MONTH(B2:B65)),MONTH(B2:B65)))
CHOOSEROWS 函数为动态数组函数,用来从一个区域中按指定行号提取整行数据,本例中区域为 A2:D65:

=LET(a,MONTH(B2:B65),b,A2:D65,CHOOSEROWS(b,MATCH(UNIQUE(a),a)))
底层逻辑都是一样,用数学的表达方式就是:
令 a = MONTH(B2:B65) '月份用 a 来表示
令 b = A2:D65 '数据区域用 b 来表示
用 UNIQUE(a) 拿到不重复月份
用 MATCH 找每个不重复月份在 a 中第一次出现的位置
CHOOSEROWS 按这些行号取整行
=IFERROR(INDEX($A$2:$D$65,SMALL(IF(FREQUENCY(MONTH($B$2:$B$65),MONTH($B$2:$B$65))>0,ROW($B$2:$B$65)-1),ROW(A1)),COLUMN(A1)),"")
这是上一篇文章讲到的“万金油公式”,所有版本都能用
输入完公式后需要按CTRL+SHIFT+ENTER三键,然后向右、向下填充公式。
四、按指定月份提取
假设现在你要提取指定月份最后一天的数据,比如:5月份,公式要怎么改写?
解法一:LOOKUP 通用万能公式
=LOOKUP(1,0/(MONTH($B2:$B65)=5),A2:A65)'注:本公式需要向右填充
解法二:CHOOSEROWS函数
=CHOOSEROWS(A2:D65,MATCH(5,MONTH(B2:B65)))解法三:TAKE+FILTER 函数
=TAKE(FILTER(A2:D65,MONTH(B2:B65)=5),-1)解法四:XLOOKUP函数
=XLOOKUP(5,MONTH(B2:B65),A2:D65,,,-1)相关文章链接:
一对多查询必备!INDEX+SMALL万金油公式详解,5分钟彻底搞懂
还在用删除重复项?UNIQUE函数才是数据清洗的终极答案!<函数01>
99%的人还在手动筛选排序,TAKE函数已经实现 “隔空取物”!
那些年,被VLOOKUP折磨的时光,是时候用XLOOKUP翻盘了!!
本文模板下载:
https://pan.baidu.com/s/1MF_Gu1_NPP9ug8kdStqWQw?pwd=9527