4

我进行了长时间的搜索,但找不到我要找的东西。也许有人在那里可以提供帮助?

我的 Google 电子表格中有这个公式(我将在下面解释它的作用):

=Join(" ",FILTER(Sheet1!B:B;Sheet1!A:A=A1))

在表 1 中有一个表格:A 列是名字(例如“James”),B 列是一些评论(例如“Headache”)。詹姆斯(或其他任何人)可能有多行,每行都有不同的评论(例如,詹姆斯有 2 行,一个说“头痛”,另一个说“膝盖疼痛”。)

在工作表 2 的 A 列中,我有一个出现在工作表 1 中的名称列表(使用 '=UNIQUE' 公式)。A1 说“詹姆斯”。在单元格 B1 中,我输入上述公式。

结果几乎正是我想要的。它将詹姆斯的所有评论合并到一个单元格中,每个评论之间有一个空格“”。因此,单元格 B1 中的结果是:“头痛膝痛”。

但是,我必须将此公式拖到下面的所有单元格中。有谁知道我怎样才能使它像我过去使用过的所有其他 ArrayFormulas 一样,公式会自动填充下面的所有单元格?我尝试将其设为数组公式,但没有成功。

我也一直在玩这个公式,它给了我相同的结果“头痛膝盖疼痛”,但该公式仍然不会复制到下面的单元格中。

=SUBSTITUTE(Arrayformula(concatenate(FILTER(Sheet1!B:B;Sheet1!A:A=A1)&" "; "|"));" |";"")

如果有人知道如何实现这一点,我将非常感激 - 您的宝贵帮助将不胜感激。

感谢您的关注!

4

2 回答 2

4

逐行应用像 CONCATENATE 这样的聚合函数通常有点复杂。

=ArrayFormula(TRIM(TRANSPOSE(SPLIT(CONCATENATE(REPT(TRANSPOSE(Sheet1!B:B&" ");A:A=TRANSPOSE(Sheet1!A:A))&REPT(" "&CHAR(9);TRANSPOSE(ROW(Sheet1!A:A))=ROWS(Sheet1!A:A)));CHAR(9)))))

(编辑:抱歉,我没有机会测试错误/错别字,如果您能确认它有效,将删除此行)

于 2013-01-21T21:35:38.250 回答
4

我知道这个问题太老了,但是要在擦除一行时解决问题,你需要改成A:A这样filter(A:A,A:A<>"")

=ArrayFormula(TRIM(TRANSPOSE(SPLIT(CONCATENATE(REPT(TRANSPOSE(Sheet1!B:B&" ");A:A=TRANSPOSE(Sheet1!A:A))&REPT(" "&CHAR(9);TRANSPOSE(ROW(Sheet1!A:A))=ROWS(Sheet1!A:A)));CHAR(9)))))

变成:

=ArrayFormula(TRIM(TRANSPOSE(SPLIT(CONCATENATE(REPT(TRANSPOSE(Sheet1!B:B&" ");filter(A:A,A:A<>"")=TRANSPOSE(Sheet1!A:A))&REPT(" "&CHAR(9);TRANSPOSE(ROW(Sheet1!A:A))=ROWS(Sheet1!A:A)));CHAR(9)))))
于 2017-03-25T23:10:21.367 回答