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 时,它 将数组逐行转置为单列 .

请注意 flattenTRANSPOSE

之间的区别
+------+-----+----+-----------------+----------+----------+
| 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 <>''")