Google sheets GoogleSheets-将逗号分隔列表中的每个值连接到一个值,并生成一个结果列表

Google sheets GoogleSheets-将逗号分隔列表中的每个值连接到一个值,并生成一个结果列表,google-sheets,google-sheets-formula,array-formulas,Google Sheets,Google Sheets Formula,Array Formulas,我在谷歌表单中有如下列表(2列) 我想生成一个这样的列表 _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

我在谷歌表单中有如下列表(2列)

我想生成一个这样的列表

    _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")  

新增功能的工作原理

这里的关键功能是(未记录的)
flant
功能。
当我们在单元格数组上使用
展平
时,它将数组逐行转换为一列

请注意
展平
转置

+------+-----+----+-----------------+----------+----------+
| 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 <>''")
=查询(数组公式(拆分(展平(A:A&“&”拆分(B1:B,”)),“拆分”),“其中列2“))

太棒了-谢谢你。你能一步一步地解释一下这是怎么回事吗?我稍后会解释。请给我一些时间。我必须离开几个小时:(谢谢-不要着急!你节省了我的工作时间!因此,正如我对这个答案的简要解释:如果在B列的范围内有逗号分隔的值,他首先使用
split(B2:B,“,”))
用户正在用两个单独的电子邮件地址拆分这些单元格。然后他在B列中合并所有单元格,然后在A列中合并所有单元格,在每个值之间添加定界符
|
。然后他展平他拥有的值数组,然后根据定界符
|
拆分这些值。最后他查询to按字母顺序排列B列的值,并确保B列不为空。“您节省了我的工作时间!”很高兴我能提供帮助“您能解释一下这是如何工作的”请检查我的更新答案…它避免了concat()的50000个字符限制。
=query(ArrayFormula(split(flatten(A:A&"_"&split(B1:B, ",")), "_")), "where Col2 <>''")