答案1
如果必须使用CONCAT()
,则可以使用以下方法:
=LEFT(CONCAT((CHAR(34)&FILTER($B$1:$C21,$A$1:$A21=E1)&CHAR(34))&I1:J1),
LEN(CONCAT((CHAR(34)&FILTER($B$1:$C21,$A$1:$A21=E1)&CHAR(34))&I1:J1))-1)
它需要UNIQUE()
在 E1 中的 A1:C15 范围内使用到SPILL
第一列中...唯一...元素的列表,然后输入到某个单元格(例如 F1)中,并向下复制到该列,直到不再存在 E1# 的唯一元素。该公式用于FILTER()
获取第二列和第三列中 A 列值与该行的 E1# 结果匹配的所有元素。"
(双引号) 字符与一个简单的字符串连接一起添加,将输入构建为CONCAT()
。一切都CONCAT()
将在其自己的括号 ( ()
) 内进行处理,因此它可以以附加到每个元素的方式附加某些内容,而不仅仅是整个结果。
当您将生成的每个字符串元素附加到其中时,就会发生“魔法” CONCAT()
。我没有使用单个字符(冒号或逗号),而是使用范围 I1:J1(分别包含冒号和逗号),而是想办法将它们的右半部分更改为其他字符。我本可以使用 而&{":",","}
不是 来对它们进行硬编码&I1:J1
,但如果您愿意的话...
因此,使用 时,您将面临一个问题CONCAT()
:由于在每个元素后附加一个字符,因此附加的字符会结束字符串,并且无法对最后一个元素进行不同的处理。因此,对TEXTJOIN()
which 的偏好不存在这个问题。在这里,我用锤子将其敲掉:我过去LEFT()
保留除最后一个字符之外的所有字符串,因此第二个参数LEFT()
是字符串的长度减 1。
如果您可以使用TEXTJOIN()
,则以下公式适合您:
=TEXTJOIN($I$1:$J$1,TRUE,CHAR(34)&FILTER($B$1:$C15,$A$1:$A15=E1)&CHAR(34))
再次,您可以对第一个参数(即您使用的分隔符)进行硬编码。我要花点时间说明一下,据我所知,您的 Excel 或 Windows 语言版本可能使用这些分隔符,即同一列单元格之间的“:”和跳转到新行的“,” 。不过,由于您想指定两个分隔符,所以无论如何您都不能依赖系统默认值,所以...
哦,最后的想法:您看到了CHAR(34)
用于添加这些双引号的位。我更喜欢使用它们,而不是摆弄要输入多少个双引号才能让 Excel 在前面添加和附加单个"
字符。您可能更喜欢摆弄。此外,您可能将它们显示为构建字符串的产物,以便手动创建所需输出的示例,并且并不真正希望所有内容都加双引号。如果是这种情况,在任何一个公式中,您只需删除这些位即可。