s0m*_*lng 5 google-sheets google-apps-script array-formulas google-sheets-query google-sheets-formula
我正在尝试使用查询来显示多个 Google 表格中的数据。我每周都会制作一个具有特定工作表名称的新工作表,例如Week of 01/13,Week of 01/06等等。
以下是我的想法产生的地方以供参考:
我有一个正在使用的汇总表
COUNTA(INDIRECT("'" & A5 & "'!E4:E",true)A5 是连接日期和单词以复制工作表名称的单元格。
汇总表上的行直到
B5<=today()因此,我可以将其设置为忘记它,并且随着时间的推移,工作表将继续为我提供每周数据,并保持工作表清洁,直到一周结束。
长话短说,我有一个我使用的查询,它使用特定参数为我提供了我需要的所有数据,但我必须每周使用新的工作表名称手动更新数据语法数组。
=QUERY({'Week of 01/13'!A:P;'Week of 01/06'!A:P;'Week of 12/30'!A:P;'Week of 12/23'!A:P;'WEEK OF 12/16'!A:P;'WEEK OF 12/09'!A:P;'WEEK OF 12/02'!A:P;'WEEK OF 11/25'!A:P;'WEEK OF 11/18'!A:P;'WEEK OF 11/11'!A:P;'WEEK OF 11/04'!A:P;'WEEK OF 10/28'!A:P;'WEEK OF 10/21'!A:P;'WEEK OF 10/14'!A:P;'WEEK OF 10/07'!A:P;'WEEK OF 09/30'!A:P;'WEEK OF 09/23'!A:P;'WEEK OF 09/16'!A:P;'WEEK OF 09/09'!A:P;'WEEK OF 09/02'!A:P},
"Select * where Col11 = 'RD' order by Col2 desc",0)
Run Code Online (Sandbox Code Playgroud)
我想构建一个对数组的引用,该数组将根据日期自动填充连接。
使用下面的代码我可以让连接给我我需要的数组,
=if(H4<=today(),CONCATENATE("'",H$1,text(H4,"mm/dd"),"'!A:P;",),"")
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将它输入到查询函数中时,它只返回连接的文本:
=QUERY(I1,"Select *")
Run Code Online (Sandbox Code Playgroud)
'Week of 01/06'!A:P;'Week of 01/13'!A:P
Run Code Online (Sandbox Code Playgroud)
我试过有和没有大括号都没有成功。
我希望工作表能够刷新并查看它是正确的日期,填充新的工作表名称并更新查询。
我需要帮助来完成I1工作。
pla*_*er0 11
将函数复制粘贴INDIRECT到 Google Sheets 中的家伙完全无法理解它的潜力,因此他们不遗余力地改进它并涵盖在这个数组时代至关重要的明显逻辑。
换句话说,INDIRECT 不能接受多个数组:
=INDIRECT("Sheet1!A:B"; "Sheet2!A:B")\nRun Code Online (Sandbox Code Playgroud)\n\n也不将数组字符串转换为活动引用,这意味着任何连接尝试也是徒劳的:
\n\n=INDIRECT(MasterSheet!A1:A10)\n\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\n=INDIRECT("{Sheet1!A:B; Sheet2!A:B}")\n\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\n={INDIRECT("Sheet1!A:B"; "Sheet2!A:B")}\n\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\n=INDIRECT("{INDIRECT("Sheet1!A:B"); INDIRECT("Sheet2!A:B")}")\nRun Code Online (Sandbox Code Playgroud)\n\nINDIRECT唯一可能的方法是在每一端使用每个范围,例如:
={INDIRECT("Sheet1!A:B"); INDIRECT("Sheet2!A:B")}\nRun Code Online (Sandbox Code Playgroud)\n\n这意味着,如果仅存在部分工作表/选项卡,您能做的最好的事情就是像这样对数组进行预编程(让我们假设一个场景,总共 4 个工作表中只创建了 2 个工作表):
\n\n=QUERY(\n {IFERROR(INDIRECT("Sheet1!A1:B5"), {"",""}); \n IFERROR(INDIRECT("Sheet2!A1:B5"), {"",""}); \n IFERROR(INDIRECT("Sheet3!A1:B5"), {"",""}); \n IFERROR(INDIRECT("Sheet4!A1:B5"), {"",""})}, \n "where Col1 is not null", 0)\nRun Code Online (Sandbox Code Playgroud)\n\n因此,即使工作表名称是可预测的(并不总是如此),像这样预编程 100 多个工作表也会很痛苦(即使有各种偷偷摸摸的方法如何在 30 秒内编写这样的公式)
\n\n另一种方法是使用脚本来转换字符串并将其作为公式注入
\n\nA1 将是处理看起来像真实公式的字符串的公式:
\n\n=ARRAYFORMULA("=QUERY({"&TEXTJOIN("; ", 1, \n IF(A3:A<>"", "\'Week of "&LEFT(A3:A, 5)&"\'!A1:D5", ))&\n "}, ""where Col1 is not null"", 1)")\nRun Code Online (Sandbox Code Playgroud)\n\n进一步填充 A6:A 将自动扩展字符串
\n\n那么此脚本将从 A1 单元格中获取字符串,并将其作为有效公式粘贴到 C5 单元格中:
\n\nfunction onEdit() { \nvar sheet = SpreadsheetApp.getActive().getSheetByName(\'Master Sheet\'); \nvar src = sheet.getRange("A1");\nvar str = src.getValue(); \nvar cell = sheet.getRange("C5"); \ncell.setFormula(str);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n当然,脚本可以更改为 onOpen 触发器或使用自定义名称从自定义菜单或通过按钮触发(但是不可能直接使用自定义函数作为公式)
\n小智 1
如果您尝试更新查询正在查看的数据并且向其提供一个字符串,则需要将该字符串放入indirect() 函数中。这会将您的字符串解释为数据引用,并将您的 query() 指向正确的方向。
所以为此你可能会有
=QUERY(INDIRECT(I1),"Select *")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2142 次 |
| 最近记录: |