Google 工作表 - 将一个值连接到逗号分隔列表中的每个值并生成单个结果列表
Google sheets - join one value to each value in comma separated list and generate a single list of the results
我在 Google 工作表(2 列)
中有如下列表
_A_ _B_________________________________
_1_ 932 a@email.com,b@email.com
_2_ 343 c@email.com,d@email.com,e@email.com
_3_ 198
_4_ 197 f@email.com
_5_ 231 g@email.com,h@email.com
我想生成一个这样的列表...
_A_ _B_________
_1_ 932 a@email.com
_2_ 932 b@email.com
_3_ 343 c@email.com
_4_ 343 d@email.com
_5_ 343 e@email.com
_6_ 197 f@email.com
_7_ 231 g@email.com
_8_ 231 h@email.com
到目前为止,我已经在 C1 中完成了这个...
=arrayformula(IF(B2:B5="","",concat(A2:A5,CONCAT("|",split(B2:B5,",")))))
...生成这个...
_A_ _B_________________________________ _C_____________ _D_____________ _E_____________
_1_ 932 a@email.com,b@email.com 932|a@email.com 932|b@email.com 932|
_2_ 343 c@email.com,d@email.com,e@email.com 343|c@email.com 343|d@email.com 343|e@email.com
_3_ 198 198| 198| 198|
_4_ 197 f@email.com 197|f@email.com 197| 197|
_5_ 231 g@email.com,h@email.com 231|g@email.com 231|h@email.com 231|
...现在我很困。请帮忙!
请使用以下公式
=QUERY(arrayformula(IFERROR(SPLIT(flatten(IF(B2:B="","",concat(A2:A,CONCAT("|",split(B2:B,","))))),"|"))),"where Col2 is not null")
添加的功能如何工作
这里的关键函数是(未记录的)flatten
函数。
当我们在单元格数组上使用 flatten
时,它 将数组逐行转置为单列 .
请注意 flatten
和 TRANSPOSE
之间的区别
+------+-----+----+-----------------+----------+----------+
| array of cells | =flatten(A1:C2) | =TRANSPOSE(A1:C2) |
+------+-----+----+-----------------+----------+----------+
| 1 | 2 | 3 | 1 | 1 | 4 |
| 4 | 5 | 6 | 2 | 2 | 5 |
| | | | 3 | 3 | 6 |
| | | | 4 | | |
| | | | 5 | | |
| | | | 6 | | |
+------+-----+----+-----------------+----------+----------+
一旦我们得到一列中的所有内容,我们将再次使用 SPLIT
,最后使用 QUERY
函数删除第二列中没有值的行。
IFERROR
函数在这里实际上并不需要它,但我们通常将其用作预防措施。
使用的函数:
看看这是否有帮助
=query(ArrayFormula(split(flatten(A:A&"_"&split(B1:B, ",")), "_")), "where Col2 <>''")
我在 Google 工作表(2 列)
中有如下列表 _A_ _B_________________________________
_1_ 932 a@email.com,b@email.com
_2_ 343 c@email.com,d@email.com,e@email.com
_3_ 198
_4_ 197 f@email.com
_5_ 231 g@email.com,h@email.com
我想生成一个这样的列表...
_A_ _B_________
_1_ 932 a@email.com
_2_ 932 b@email.com
_3_ 343 c@email.com
_4_ 343 d@email.com
_5_ 343 e@email.com
_6_ 197 f@email.com
_7_ 231 g@email.com
_8_ 231 h@email.com
到目前为止,我已经在 C1 中完成了这个...
=arrayformula(IF(B2:B5="","",concat(A2:A5,CONCAT("|",split(B2:B5,",")))))
...生成这个...
_A_ _B_________________________________ _C_____________ _D_____________ _E_____________
_1_ 932 a@email.com,b@email.com 932|a@email.com 932|b@email.com 932|
_2_ 343 c@email.com,d@email.com,e@email.com 343|c@email.com 343|d@email.com 343|e@email.com
_3_ 198 198| 198| 198|
_4_ 197 f@email.com 197|f@email.com 197| 197|
_5_ 231 g@email.com,h@email.com 231|g@email.com 231|h@email.com 231|
...现在我很困。请帮忙!
请使用以下公式
=QUERY(arrayformula(IFERROR(SPLIT(flatten(IF(B2:B="","",concat(A2:A,CONCAT("|",split(B2:B,","))))),"|"))),"where Col2 is not null")
添加的功能如何工作
这里的关键函数是(未记录的)flatten
函数。
当我们在单元格数组上使用 flatten
时,它 将数组逐行转置为单列 .
请注意 flatten
和 TRANSPOSE
+------+-----+----+-----------------+----------+----------+
| array of cells | =flatten(A1:C2) | =TRANSPOSE(A1:C2) |
+------+-----+----+-----------------+----------+----------+
| 1 | 2 | 3 | 1 | 1 | 4 |
| 4 | 5 | 6 | 2 | 2 | 5 |
| | | | 3 | 3 | 6 |
| | | | 4 | | |
| | | | 5 | | |
| | | | 6 | | |
+------+-----+----+-----------------+----------+----------+
一旦我们得到一列中的所有内容,我们将再次使用 SPLIT
,最后使用 QUERY
函数删除第二列中没有值的行。
IFERROR
函数在这里实际上并不需要它,但我们通常将其用作预防措施。
使用的函数:
看看这是否有帮助
=query(ArrayFormula(split(flatten(A:A&"_"&split(B1:B, ",")), "_")), "where Col2 <>''")