QUERY函数调整后报错NO_COLUMN: Col3的排查解决方法
QUERY函数返回
NO_COLUMN: Col3报错修复方案 报错根因
QUERY函数中的ColN编号不对应源工作表的原生列序号,仅对应QUERY第一个参数中手动构造的虚拟数组的列排列顺序:编号从1开始计数,传入的数组总共有多少列,可用的最大Col编号就是多少。
问题定位
原公式正常运行的逻辑
原公式传入的虚拟数组范围为:{'All Report Sheet'!$A$1:A,'All Report Sheet'!$B$1:$B}
该数组共2列,对应关系为:
- Col1:源表A列
- Col2:源表B列
查询语句仅使用Col1、Col2,和数组结构完全匹配,因此可正常运行。
调整后公式的错误点
调整后传入的虚拟数组范围为:{'All Report Sheet'!$B$2:B,'All Report Sheet'!$C$2:$C}
该数组总共只有2列,对应关系为:
- Col1:源表B列
- Col2:源表C列
查询语句中写入了Col3判定条件,但传入的数组不存在第3列,因此直接触发列不存在报错,和源表本身是否存在C列(原生第3列)没有关联。
修复方案
匹配原公式的统计逻辑(统计同时满足「第一列匹配S2:S4关键词正则、第二列等于当前行A2」的条目数),修正后的公式如下:
=QUERY({'All Report Sheet'!$B$2:B,'All Report Sheet'!$C$2:$C},"select count(Col1) where (Col1 matches '"&JOIN("|",{$S$2:$S$4})&"') and Col2='"&$A2&"' label count(Col1) ''")
如果调整结构后,需要做等值判定的列不是C列而是更靠后的列,先把对应列补充到QUERY第一个参数的数组中,再按从左到右的排列顺序使用对应Col编号即可。
额外注意
- 后续调整QUERY取数列时,只要修改了第一个参数里的列范围、排列顺序,必须同步调整查询语句里的Col编号,按传入数组从左到右的顺序重新从1计数即可。
- 原公式从第1行(表头行)开始取数,调整后从第2行开始取数,如果数据源带表头,建议统一取数起始行,或给QUERY加第三个参数指定表头行数,避免出现数据类型识别错误。
内容的提问来源于stack exchange,提问作者KG RsL
相关产品推荐
相关产品推荐

