如何修改QUERY函数实现按当前年月匹配A列提取C列数据?
解决QUERY公式匹配年月返回错误值的问题
问题原因
你的公式错误在于类型不匹配:
- 若A列是文本格式的年月(如
Jan 2023),公式里用date 'yyyy-mm-dd'格式去匹配文本,两者类型不兼容,导致QUERY无法正确匹配目标行,反而返回了错误结果。 - 若A列是日期格式(实际存储的是当月某一天,仅显示为年月),公式仅匹配当月第一天的日期,若A列存储的不是当月第一天,条件就不成立,自然找不到目标值。
针对性修改方案
方案1:A列为文本格式的年月
将公式生成的日期转为和A列一致的文本格式,直接匹配:
=QUERY(A1:C8,"select C where A = '"&TEXT(TODAY(),"mmm yyyy")&"'",1)
TEXT(TODAY(),"mmm yyyy")会把当前日期转为Apr 2023这类文本,和A列格式完全匹配,确保WHERE条件精准定位目标行。
方案2:A列为日期格式(存储当月任意日期)
直接匹配年月而非具体日期,用year()和month()函数提取年月信息:
=QUERY(A1:C8,"select C where year(A) = year(TODAY()) and month(A) = month(TODAY())",1)
这个公式会匹配所有和当前日期年月相同的行,不管A列存储的是当月哪一天。
备选方案:匹配当月日期范围
如果需要明确限定当月的日期区间,也可以用以下公式:
=QUERY(A1:C8,"select C where A >= date '"&TEXT(EOMONTH(TODAY(),-1)+1,"yyyy-mm-dd")&"' and A <= date '"&TEXT(EOMONTH(TODAY(),0),"yyyy-mm-dd")&"'",1)
该公式会匹配A列日期在当前月第一天到最后一天之间的行。
内容的提问来源于stack exchange,提问作者Matt Coady
相关产品推荐
相关产品推荐

