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