在 Google 工作表中使用 ArrayFormula 连接 headers 列中的 non-blank 列
Using ArrayFormula in Google Sheets to concatenate headers of non-blank columns
我想创建一个列,列出非空白范围内的列(每一行)的 headers(它们应该其中有日期,如果相关 - 但在为列添加日期之前将保持空白)。
我真的很想使用 ArrayFormula(或类似的东西)自动填充,因为我的 spreadsheet 一直被添加到其中,而那些添加到它的人不太可能记得传播所有必要的每次都是公式。我的虚拟 sheet 是 here。
列 E:G
包含 A、B 和 C 事件发生的日期,每个 person/row。我想列出那个人发生的事情的列名。但是我不知道如何让它忽略空白单元格。
将每个可能的空白单元格 + non-blank 单元格组合组合在一起是不可能的,因为在真实数据集中我有超过 3 个这样的列,它们也会被添加到任意数字其中
您可以在 M 列中看到所需的输出(我手动输入)。我在 P 和 Q 中进行了不充分的尝试。我什至还没有弄清楚如何为一个单元格执行此操作,更不用说一个 ArrayFormula会为我做的。
我想这可以使用 ArrayFormula 来完成,但我很乐意接受其他同样有效的解决方案。
尝试 TEXTJOIN()
公式,如-
=ArrayFormula(TEXTJOIN(", ",TRUE,IF(E2:G2<>"",$E:$G,"")))
我喜欢一个好问题!有很多不同的方法可以解决这个问题,但我总是喜欢寻找一种方法来在数组中找到一个解决方案,这样我就不必一直复制公式了。
=Array_Constrain(ArrayFormula(If(Right(if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",))=",",regexreplace(if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",), "(.),", ""),if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",))),CountA(A2:A),1)
数组将限制 A 列中包含字符串数据的总行数。添加新行后,公式将根据请求的条件 auto-populate。
已更新:
要包括 header:
=Array_Constrain(ArrayFormula({"OneinaM"; If(Right(if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",))=",",regexreplace(if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",), "(.),", ""),if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",))}),CountA(A:A),1)
我已将新的 sheet(“Erik 帮助 - 问题 2”)添加到您的传播sheet。以下公式位于单元格 M1 中,以绿色突出显示:
=ArrayFormula({"contactedFor"; IF(A2:A="",, REGEXREPLACE(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(E2:G="" ,, E1:G1&"|")), " ", COLUMNS(E1:G1)))), "|", ","), ",$", ""))})
这个公式利用了 QUERY
处理 headers 的方式中的一个怪癖(即,它允许多个 headers,而不仅仅是 0 或 1)。因此我们可以将 E:G 结果“堆叠”为 headers、TRIM
空白,然后 TRANSPOSE
它们与 row-by-row 结果相匹配。
我想创建一个列,列出非空白范围内的列(每一行)的 headers(它们应该其中有日期,如果相关 - 但在为列添加日期之前将保持空白)。
我真的很想使用 ArrayFormula(或类似的东西)自动填充,因为我的 spreadsheet 一直被添加到其中,而那些添加到它的人不太可能记得传播所有必要的每次都是公式。我的虚拟 sheet 是 here。
列 E:G
包含 A、B 和 C 事件发生的日期,每个 person/row。我想列出那个人发生的事情的列名。但是我不知道如何让它忽略空白单元格。
将每个可能的空白单元格 + non-blank 单元格组合组合在一起是不可能的,因为在真实数据集中我有超过 3 个这样的列,它们也会被添加到任意数字其中
您可以在 M 列中看到所需的输出(我手动输入)。我在 P 和 Q 中进行了不充分的尝试。我什至还没有弄清楚如何为一个单元格执行此操作,更不用说一个 ArrayFormula会为我做的。
我想这可以使用 ArrayFormula 来完成,但我很乐意接受其他同样有效的解决方案。
尝试 TEXTJOIN()
公式,如-
=ArrayFormula(TEXTJOIN(", ",TRUE,IF(E2:G2<>"",$E:$G,"")))
我喜欢一个好问题!有很多不同的方法可以解决这个问题,但我总是喜欢寻找一种方法来在数组中找到一个解决方案,这样我就不必一直复制公式了。
=Array_Constrain(ArrayFormula(If(Right(if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",))=",",regexreplace(if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",), "(.),", ""),if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",))),CountA(A2:A),1)
数组将限制 A 列中包含字符串数据的总行数。添加新行后,公式将根据请求的条件 auto-populate。
已更新:
要包括 header:
=Array_Constrain(ArrayFormula({"OneinaM"; If(Right(if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",))=",",regexreplace(if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",), "(.),", ""),if(E2:E <>"","A,",)&if(F2:F <>"","B,",)&if(G2:G <>"","C",))}),CountA(A:A),1)
我已将新的 sheet(“Erik 帮助 - 问题 2”)添加到您的传播sheet。以下公式位于单元格 M1 中,以绿色突出显示:
=ArrayFormula({"contactedFor"; IF(A2:A="",, REGEXREPLACE(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(E2:G="" ,, E1:G1&"|")), " ", COLUMNS(E1:G1)))), "|", ","), ",$", ""))})
这个公式利用了 QUERY
处理 headers 的方式中的一个怪癖(即,它允许多个 headers,而不仅仅是 0 或 1)。因此我们可以将 E:G 结果“堆叠”为 headers、TRIM
空白,然后 TRANSPOSE
它们与 row-by-row 结果相匹配。