Google sheets Arrayformula在Google工作表中生成重复项

Google sheets Arrayformula在Google工作表中生成重复项,google-sheets,array-formulas,Google Sheets,Array Formulas,我似乎有一个数组公式,它正在为我生成副本 我将向您展示D列中的代码,然后解释问题: =arrayformula( if (C1225:C$1684="A",A1225:A$1684, if (C1225:C$1684="B",B1225:B$1684, if (C1225:C$1684="AB",{A1225:A$1684, B1225:B$1684},"")))) 如果是A或B,它应该把A或B的内容放在D中。所以我希望E单元格为空,除非C中的内容是“AB”-只有这样我才希望两个单元格填充A

我似乎有一个数组公式,它正在为我生成副本

我将向您展示D列中的代码,然后解释问题:

=arrayformula(
if (C1225:C$1684="A",A1225:A$1684, 
if (C1225:C$1684="B",B1225:B$1684,
if (C1225:C$1684="AB",{A1225:A$1684, B1225:B$1684},""))))
如果是A或B,它应该把A或B的内容放在D中。所以我希望E单元格为空,除非C中的内容是“AB”-只有这样我才希望两个单元格填充A和B中的数据

目前,它发出了两次警告

For No One|No Reply|ab|For No One|No Reply
Across The Universe (Let It Be Naked...)|The End|a|Across The Universe (Let It Be Naked...)|Across The Universe (Let It Be Naked...)
All You Need Is Love|Twist And Shout|b|Twist And Shout|Twist And Shout

因此,第一行是可以的,但第二行生成了不需要的重复项。

您遇到的问题是因为ARRAYFORMULA将所有响应设置为一个由2项组成的数组。由于最终结果具有此大小,因此所有结果必须具有相同的大小

尝试此操作,更改范围以满足您的需要,以及10:

=arrayformula(
if (C2:C$11="A",{A2:A$11, transpose(split(rept(", ", 10), ",", TRUE))}, 
if (C2:C$11="B",{B2:B$11, transpose(split(rept(", ", 10), ",", TRUE))},
if (C2:C$11="AB",{A2:A$11, B2:B$11},))))
rept(“,”,10)部分创建一个文本字符串,该字符串是“,”重复10次,或“,,,,”

Split()然后将其拆分为每个逗号的一个条目,删除逗号,在本例中为一系列空格。TRUE告诉Split对每次出现的逗号执行此操作,因此它变为:

split(", , , , , , , , , , ", ",", TRUE)
然后我使用transpose()将其更改为行而不是列。这需要与我使用括号创建的数组中的其他项的行数相同,因此我基本上得到: {A2:A$10,[为每行填写空白条目]}

因此,如果我的数学计算正确,您应该使用:

=arrayformula(
if (C1225:C$1684="A",{A1225:A$1684, transpose(split(rept(", ", 460), ",", TRUE))}, 
if (C1225:C$11="B",{B1225:B$1684, transpose(split(rept(", ", 460), ",", TRUE))},
if (C1225:C$11="AB",{A1225:A$1684, B2:B$11},))))

您遇到的问题是因为ARRAYFORMULA将所有响应设置为包含2项的数组。由于最终结果具有此大小,因此所有结果必须具有相同的大小

尝试此操作,更改范围以满足您的需要,以及10:

=arrayformula(
if (C2:C$11="A",{A2:A$11, transpose(split(rept(", ", 10), ",", TRUE))}, 
if (C2:C$11="B",{B2:B$11, transpose(split(rept(", ", 10), ",", TRUE))},
if (C2:C$11="AB",{A2:A$11, B2:B$11},))))
rept(“,”,10)部分创建一个文本字符串,该字符串是“,”重复10次,或“,,,,”

Split()然后将其拆分为每个逗号的一个条目,删除逗号,在本例中为一系列空格。TRUE告诉Split对每次出现的逗号执行此操作,因此它变为:

split(", , , , , , , , , , ", ",", TRUE)
然后我使用transpose()将其更改为行而不是列。这需要与我使用括号创建的数组中的其他项的行数相同,因此我基本上得到: {A2:A$10,[为每行填写空白条目]}

因此,如果我的数学计算正确,您应该使用:

=arrayformula(
if (C1225:C$1684="A",{A1225:A$1684, transpose(split(rept(", ", 460), ",", TRUE))}, 
if (C1225:C$11="B",{B1225:B$1684, transpose(split(rept(", ", 460), ",", TRUE))},
if (C1225:C$11="AB",{A1225:A$1684, B2:B$11},))))