Google Sheets复杂QUERY公式匹配数据却返回N/A求助
Google Sheets QUERY公式失效排查与解决
问题背景
2020年底创建的Google Sheets考勤表中,有一个复杂QUERY公式曾正常运行,2020年12月后突然失效。公式用于查询考勤数据区域'Respostas do Formulário 1'!$C$2:$H,匹配单元格B50的员工编号(对应C列),并匹配F列的'Domingos / Sundays'字符串,返回G列日期。
原公式
=IF(ISNA(CONCATENATE((transpose(query(transpose(UNIQUE(query('Respostas do Formulário 1'!$C$2:$H; "select G where C contains '"&$B50&"' AND F contains 'Domingos / Sundays' order by G format G 'DD/MM, '")));;COLUMNS(UNIQUE(query('Respostas do Formulário 1'!$C$2:$H; "select G where C contains '"&$B50&"' AND F contains 'Domingos / Sundays' order by G format G 'DD/MM, '"))))));"",CONCATENATE((transpose(query(transpose(UNIQUE(query('Respostas do Formulário 1'!$C$2:$H; "select G where C contains '"&$B50&"' AND F contains 'Domingos / Sundays' order by G format G 'DD/MM, '")));;COLUMNS(UNIQUE(query('Respostas do Formulário 1'!$C$2:$H; "select G where C contains '"&$B50&"' AND F contains 'Domingos / Sundays' order by G format G 'DD/MM, '"))))))
预期功能
公式需实现:
- 无匹配结果时返回空值
- 有匹配结果时显示内容
- 将结果拼接至单个单元格
- 对结果去重
- 转置为横向显示
- 按G列日期排序,格式化为
DD/MM
当前异常
即使存在匹配数据,公式仍返回空白(对应N/A)。
已尝试操作
- 重新编写公式,结果一致
- 核对版本历史,公式未变更但结果异常
- 修改引用单元格及数据的数字/文本格式,无改善
- 简化为基础QUERY公式仍返回N/A,简化公式如下:
query('Respostas do Formulário 1'!$C$2:$H; "select G where C contains '"&$B50&"' AND F contains 'Domingos / Sundays' order by G format G 'DD/MM, '")
推测原因
怀疑Google Sheets在2020年底后对QUERY语法或处理逻辑进行了更新,导致旧版本公式失效。测试表中公式可正常运行,但实际表格无法工作。
解决办法
1. 消除字符干扰
检查B50单元格的员工编号是否存在多余空格或特殊字符,用TRIM()清理后再匹配:
query('Respostas do Formulário 1'!$C$2:$H; "select G where C contains '"&TRIM($B50)&"' AND F contains 'Domingos / Sundays' order by G format G 'DD/MM, '")
2. 替换为更稳定的FILTER+TEXTJOIN组合
用FILTER筛选数据、UNIQUE去重、TEXTJOIN拼接结果,替代复杂的QUERY嵌套,兼容新版Google Sheets:
=TEXTJOIN(", ", TRUE, UNIQUE(FILTER('Respostas do Formulário 1'!$G$2:$G, REGEXMATCH('Respostas do Formulário 1'!$C$2:$C, TRIM($B50)), 'Respostas do Formulário 1'!$F$2:$F = "Domingos / Sundays")))
注:选中公式所在单元格,手动设置日期格式为DD/MM即可完成格式要求。
3. 简化原QUERY逻辑
保留QUERY但优化冗余调用,用TEXTJOIN替代复杂转置拼接,同时用IFERROR替代ISNA提升兼容性:
=IFERROR(TEXTJOIN(", ", TRUE, UNIQUE(QUERY('Respostas do Formulário 1'!$C$2:$H, "select G where C contains '"&TRIM($B50)&"' AND F contains 'Domingos / Sundays' order by G format G 'DD/MM'"))), "")
内容的提问来源于stack exchange,提问作者TheWoodenMan
相关产品推荐
相关产品推荐

