可以像条件格式自定义公式一样使用 ArrayFormula 吗?
Possible to use ArrayFormula like Conditional Formatting Custom Formula?
我有一个简单的 Google Sheets 电子表格,可以跟踪一组人完成的任务。当每个人完成一项任务时,我使用一个简单的复选框来标记完成:
Task: A B C D
Human 1 [x] [] [] []
Human 2 [x] [x] [x] []
Human 3 [] [x] [] [x]
Human 4 [x] [x] [x] [x]
我正在寻找一些方法来创建一个总结哪些任务尚未完成的专栏,例如:
Task: A B C D Not Yet Completed:
Human 1 [x] [] [] [] B, C, D
Human 2 [x] [x] [x] [] D
Human 3 [] [x] [] [x] A, C
Human 4 [x] [x] [x] [x] (Blank)
我的目标是使用单个公式来完成此操作,该公式将 运行 遍历每一行并连接未选中框的列名。
我试过将 ARRAYFORMULA
与 TEXTJOIN
结合使用,如下所示:
=TEXTJOIN(", ", TRUE, ARRAYFORMULA(IF(B2:E2=FALSE,$B:$E,"")))
这可以满足我的要求,但需要将该公式复制到我要跟踪的每一行。
当我尝试将文本连接应用到二维范围时,它会将所有文本连接到一个单元格中,而不是将它逐一应用到每一行:
=TEXTJOIN(", ", TRUE, ARRAYFORMULA(IF(B2:E5=FALSE,$B:$E,"")))
---Result---
Task: A B C D Not Yet Completed:
Human 1 [x] [] [] [] B, C, D, D, A, C
Human 2 [x] [x] [x] []
Human 3 [] [x] [] [x]
Human 4 [x] [x] [x] [x]
相比之下,当我在条件格式中设置自定义公式时,它允许我 "Apply to Range"(即跨多行),但随后输入的公式仅限于单行。然后将此公式逐一应用于范围内的每一行。
是否有任何方法可以使用 ARRAYFORMULA
或 Google 工作表的其他原生功能在单元格中执行相同的 "Apply to Range" 概念?
尝试:
=ARRAYFORMULA(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
IF((B2:E<>"")*(B2:E=FALSE), B1:E1&",", )),,999^99))), ",$", ))
spreadsheet demo
困难的方法:使用 &(如果您有固定数量的列,这将有效,否则您将不得不不断更新公式)
={"Not Yet Completed:";arrayformula(if(A2:A="","",substitute(trim(if(B2:B," ",B1&" ")&if(C2:C," ",C1&" ")&if(D2:D," ",D1&" ")&if(E2:E," ",E1&" "))," ",", ")))}
简单方法:使用查询 Header(与 player0 的答案几乎相同,但方法略有不同)
={"Not Yet Completed:";arrayformula(if(A2:A="","",substitute(trim(transpose(query(transpose(if(B2:E5,"",B1:E1)),"",columns(B1:E1))))," ",", ")))}
我有一个简单的 Google Sheets 电子表格,可以跟踪一组人完成的任务。当每个人完成一项任务时,我使用一个简单的复选框来标记完成:
Task: A B C D
Human 1 [x] [] [] []
Human 2 [x] [x] [x] []
Human 3 [] [x] [] [x]
Human 4 [x] [x] [x] [x]
我正在寻找一些方法来创建一个总结哪些任务尚未完成的专栏,例如:
Task: A B C D Not Yet Completed:
Human 1 [x] [] [] [] B, C, D
Human 2 [x] [x] [x] [] D
Human 3 [] [x] [] [x] A, C
Human 4 [x] [x] [x] [x] (Blank)
我的目标是使用单个公式来完成此操作,该公式将 运行 遍历每一行并连接未选中框的列名。
我试过将 ARRAYFORMULA
与 TEXTJOIN
结合使用,如下所示:
=TEXTJOIN(", ", TRUE, ARRAYFORMULA(IF(B2:E2=FALSE,$B:$E,"")))
这可以满足我的要求,但需要将该公式复制到我要跟踪的每一行。
当我尝试将文本连接应用到二维范围时,它会将所有文本连接到一个单元格中,而不是将它逐一应用到每一行:
=TEXTJOIN(", ", TRUE, ARRAYFORMULA(IF(B2:E5=FALSE,$B:$E,"")))
---Result---
Task: A B C D Not Yet Completed:
Human 1 [x] [] [] [] B, C, D, D, A, C
Human 2 [x] [x] [x] []
Human 3 [] [x] [] [x]
Human 4 [x] [x] [x] [x]
相比之下,当我在条件格式中设置自定义公式时,它允许我 "Apply to Range"(即跨多行),但随后输入的公式仅限于单行。然后将此公式逐一应用于范围内的每一行。
是否有任何方法可以使用 ARRAYFORMULA
或 Google 工作表的其他原生功能在单元格中执行相同的 "Apply to Range" 概念?
尝试:
=ARRAYFORMULA(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
IF((B2:E<>"")*(B2:E=FALSE), B1:E1&",", )),,999^99))), ",$", ))
spreadsheet demo
困难的方法:使用 &(如果您有固定数量的列,这将有效,否则您将不得不不断更新公式)
={"Not Yet Completed:";arrayformula(if(A2:A="","",substitute(trim(if(B2:B," ",B1&" ")&if(C2:C," ",C1&" ")&if(D2:D," ",D1&" ")&if(E2:E," ",E1&" "))," ",", ")))}
简单方法:使用查询 Header(与 player0 的答案几乎相同,但方法略有不同)
={"Not Yet Completed:";arrayformula(if(A2:A="","",substitute(trim(transpose(query(transpose(if(B2:E5,"",B1:E1)),"",columns(B1:E1))))," ",", ")))}