如何在Google Sheets的QUERY函数中按列名选择列?
Google Sheets QUERY函数按列名筛选的修正方案
你的公式主要存在引号嵌套错误、SELECT子句语法缺失和字符串未闭合三个问题,以下是修正后的方案:
基础修正版
先修复语法错误,确保公式能正常运行:
=QUERY(ImportRange!A1:BH1900, "SELECT " & SUBSTITUTE(ADDRESS(1, MATCH("Auditor", ImportRange!A1:BH1, 0), 4), 1, "") & ", " & SUBSTITUTE(ADDRESS(1, MATCH("RANK(", ImportRange!A1:BH1, 0), 4), 1, "") & " WHERE " & SUBSTITUTE(ADDRESS(1, MATCH("Auditor", ImportRange!A1:BH1, 0), 4), 1, "") & " contains '" & $F5 & "'", 0)
错误点说明
- 引号嵌套冲突:原公式中
MATCH("RANK(",...)的双引号与外层QUERY参数的双引号未正确分隔,导致字符串解析失败; - SELECT子句缺少分隔符:两个列名之间未添加逗号(
", "),会生成无效的查询语句; - 字符串未闭合:原公式中
MATCH("RANK(",...)的字符串未添加闭合引号"),直接导致公式报错。
优化简化版(推荐)
使用LET函数复用列名匹配结果,减少重复计算,让公式更易维护:
=LET( auditorCol, SUBSTITUTE(ADDRESS(1, MATCH("Auditor", ImportRange!A1:BH1, 0), 4), 1, ""), rankCol, SUBSTITUTE(ADDRESS(1, MATCH("RANK(", ImportRange!A1:BH1, 0), 4), 1, ""), QUERY(ImportRange!A1:BH1900, "SELECT " & auditorCol & ", " & rankCol & " WHERE " & auditorCol & " contains '" & SUBSTITUTE($F5, "'", "''") & "'", 0) )
额外优化说明
- 添加
SUBSTITUTE($F5, "'", "''")是为了处理$F5中包含单引号的情况,避免QUERY语法报错; MATCH函数第三个参数设为0,确保精确匹配表头文本,需保证"Auditor"和"RANK("与表头内容完全一致(包括大小写、特殊字符)。
内容的提问来源于stack exchange,提问作者Guido
相关产品推荐
相关产品推荐

