我有一张使用Google表格的表格。它有三列,始终具有空值或该列的特定值。每行将有一个,两个或三个值;它在一行上永远不会有三个空值。在第四列中,我想要一个ArrayFormula,它将组合这些值,并且如果有多个值,则用逗号分隔值。
到目前为止,我已经尝试了几个想法,这个公式是我到目前为止最接近的,但它仍然没有正常工作;我认为它是在连接之前将每个列视为一个数组,而不是逐行执行该功能。我使用LEN功能而不是A2 =""或ISBLANK(A2),因为列A-C也是ArrayFormulas。我意识到这可能不是最有效的公式,但我认为它涵盖了所有可能性。我对其他想法也很开放。
={"Focus";
ArayFormula(
IFS(
$A$2:$A="", "",
(LEN(A2:A)>0 & LEN(B2:B)>0 & LEN(C2:C)>0), TEXTJOIN(", ", TRUE, A2:A, B2:B, C2:C),
(LEN(A2:A)>0 & LEN(B2:B)>0 & LEN(C2:C)=0), TEXTJOIN(", ", TRUE, A2:A, B2:B),
(LEN(A2:A)>0 & LEN(B2:B)=0 & LEN(C2:C)>0), TEXTJOIN(", ", TRUE, A2:A, C2:C),
(LEN(A2:A)=0 & LEN(B2:B)>0 & LEN(C2:C)>0), TEXTJOIN(", ", TRUE, B2:B, C2:C),
(LEN(A2:A)>0 & LEN(B2:B)=0 & LEN(C2:C)=0), A2:A,
(LEN(A2:A)=0 & LEN(B2:B)>0 & LEN(C2:C)=0), B2:B,
(LEN(A2:A)=0 & LEN(B2:B)=0 & LEN(C2:C)>0), C2:C
)
)
}
是否可以通过Google表格实现这一目标?
答案 0 :(得分:3)
请尝试:
=ARRAYFORMULA(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(FILTER(A2:C,ROW(A2:C)<=MAX(IF(LEN(A2:C),ROW(A2:C)*COLUMN(A2:C)^0,0)))),,2^99)))," ",", "))
注意:
=ARRAYFORMULA(SUBSTITUTE(
SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(FILTER(SUBSTITUTE(A2:C," ",char(9)),ROW(A2:C)<=MAX(IF(LEN(A2:C),ROW(A2:C)*COLUMN(A2:C)^0,0)))),,2^99)))," ",", "),
CHAR(9)," "))
修改强>
注意到较短的变体(没有*COLUMN(A2:C)^0
)将起作用:
=ARRAYFORMULA(SUBSTITUTE(
SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(FILTER(SUBSTITUTE(A2:C," ",char(9)),ROW(A2:C)<=MAX(IF(LEN(A2:C),ROW(A2:C),0)))),,2^99)))," ",", "),
CHAR(9)," "))
注意:
array-formula
的字符串。请参阅sample file 如果您想了解任何分层公式,最好的方法是按部分拆分:
第1部分。过滤数据
FILTER(any_columns,ROW(A2:C)<=MAX(IF(LEN(A2:C),ROW(A2:C)*COLUMN(A2:C)^0,0)))
。这是我限制数据范围的方法。A2
)开始
在任何一行结束。if
完成的。 ROW(A2:C)
必须小于或等于最大数据行。
MAX(IF(LEN(A2:C), some_rows)
给出最大行。If(len..
部分检查单元格中是否包含一些文本。some_rows
部分:
MAX(IF(LEN(A2:C),ROW(A2:C)*COLUMN(A2:C)^0,0)))),,2^99)))
。
ROW(A2:C)
必须乘以列,因为filter
公式
只占一行的条件。这就是我乘以的原因
COLUMN(A2:C)^0
这是1s的列。 修改。现在注意到了,
如果没有*COLUMN(A2:C)^0
,公式可以正常工作,所以它是一个
矫枉过正。第2部分。加入文字
query
公式有3个参数:data,query_text和number_of_header_rows。
data
是使用过滤器制作的。
query_text
为空,这相当于全部选择
("select *"
)。
标题的行数是一个大数字(2^99
)。
这是一个技巧:当query
有更多标题然后一行时,
它将与空间联系起来。
完成联合后,transpose
函数会将结果转换回列。
第3部分。替换和修剪
函数trim
删除多余的空格。
然后我们用分隔符", "
替换空格。这就是为什么
如果空格在字符串中,则需要修改公式。正确
结果:&#34;福特,阿斯顿马丁&#34;。不正确:&#34;福特,阿斯顿,马丁&#34;。但
如果我们以前用一些char替换空格(char(9)
是Tab),
那么我们不会在这一步中替换它。