我有一个动态表格,其中的列时不时地移动。因此,我想在查询中引用我的列名称。不幸的是我不太了解,互联网提出了更多问题。
我的公式如下:
`=query('X Source'!A:AP, "select D, E, AA, AM, X, A where "&if(month(now())=1,"(month(A)<11)","(month(A) <=month(now())-2)")&" and (V like 'C & G' or V like 'SAS' or V like 'SXS D' or V like 'DIR') Order By A desc")
D = Cinter
E = Cluster
AA = Creation Date
AM = Change Ow
X = Title
A = Date`
Do you have any idea ? I would like not to write a script.
I have already tried with the function filter to bypass but there I get no further because of the filtering after month.
`={FILTER('X Source'!AA:AA, 'X Source'!V:V="SAS",'X Source'!X:X<>"%BY SB%",'X Source'!X:X<>"%SB ONLY%", month('X Source'! AA:AA)=month(today())-1);FILTER('X Source'!AA:AA,'X Source'!V:V="SXS D",'X
Source'!X:X<>"%BY SB%",'X Source'!X:X<>"%SB ONLY%"`
您可以定义以下命名函数。 (数据 > 命名函数 > 添加新函数)
姓名:
BETTERQUERY(range, better_query, headers)
定义
=QUERY({range},IF(IFERROR(SPLIT(better_query,"`")=better_query,1),better_query,
REGEXREPLACE(REDUCE(better_query,REGEXEXTRACT(better_query,REGEXREPLACE(
REGEXREPLACE(better_query,"([()\[\]{}|\\^$.+*?])","\\$1"),"`(.*?)`","`($1)`")),
LAMBDA(acc,cur,SUBSTITUTE(acc,cur,IFNA("Col"&MATCH(cur,INDEX(range,1),0),cur)))),
"`(Col\d+)`","$1")),headers)
然后像这样使用它:
=BETTERQUERY('X Source'!A:AP',"select `Cinter`, `Cluster`, `Creation date` ...",1)
有关其工作原理的更多信息,请参阅如何在 QUERY 中使用列名称
您可以使用 MATCH 来查找列数,并在大括号中获取您的范围,这样您就可以将它们称为 Col1,Col2,Col3 而不是 A,B,C
为了让它更有活力并且你可以改变你的范围,我把它包裹在 LAMBDA 中。在标题中,我匹配了您的所有值并用逗号将它们连接起来。 “日期”仅与该列匹配。第五列 当您说哪些列位于哪些标题时,我怀疑这是否是一个错误。请将“Col”&MATCH(“Title”,INDEX(range,1),0)”中的“Title”更改为实际所需的标题标题(现在位于V列中),以便正确匹配:
=LAMBDA(range,
LAMBDA(headers,date,title,query({range}, "select "&headers&" where "&if(month(now())=1,"(month("&date&")<11)","(month("&date&") <=month(now())-2)")&" and ("&title&" like 'C & G' or "&title&" like 'SAS' or "&title&" like 'SXS D' or "&title&" like 'DIR') Order By "&date&" desc"))(
JOIN(",",INDEX("Col"&MATCH({"Cinter","Cluster","Creation Date","Change Ow","Title","Date"},INDEX(range,1),0))),
"Col"&MATCH("Date",INDEX(range,1),0),
"Col"&MATCH("Title",INDEX(range,1),0)
))
('X Source'!A:AP)
在我的带有随机列的虚拟示例中,查询的内部部分将如下所示:
“选择 Col7,Col3,Col15,Col20,Col11,Col12 其中(月(Col12)<11) and (Col11 like 'C & G' or Col11 like 'SAS' or Col11 like 'SXS D' or Col11 like 'DIR') Order By Col12 desc"
=LAMBDA(range; LAMBDA(headers;date;pl;query({range}; "select "&headers&" where "&if(month(now())=1;"(month("&date&")<11)";"(month("&date&") <=month(now())-2)")&" and ("&pl&" like 'C & G' or "&pl&" like 'SAS' or "&pl&" like 'SXS D' or "&pl&" like 'DIR') Order By "&date&" desc";1))( JOIN(",";INDEX("Col"&MATCH({"Cinter";"Cluster ";"Creation Date";"Change Owner";"Title";"Date"};INDEX(range;1);0))); "Col"&MATCH("Date";INDEX(range;1);0); "Col"&MATCH("PL";INDEX(range;1);0) )) ('X Source'!A1:AS)
这是我基于这篇文章的公式,它要短得多:
=QUERY(INDIRECT(A4&"!A1:Z"),"SELECT "&SUBSTITUTE(ADDRESS(1, MATCH(A5,INDIRECT(A4&"!A1:Z1"),0), 4),1,""))
A1
A2
INDIRECT(A4&"!A2:Z")