【问题标题】:Google sheets - join one value to each value in comma separated list and generate a single list of the results谷歌表格 - 将一个值加入逗号分隔列表中的每个值并生成一个结果列表
【发布时间】:2020-10-22 14:52:41
【问题描述】:

我在 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|

...现在我很困。请帮忙!

【问题讨论】:

    标签: google-sheets google-sheets-formula array-formulas


    【解决方案1】:

    看看有没有帮助

    =query(ArrayFormula(split(flatten(A:A&"_"&split(B1:B, ",")), "_")), "where Col2 <>''")
    

    【讨论】:

    • .. 它避免了 concat() 的 50000 个字符的限制。
    【解决方案2】:

    请使用以下公式

    =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 函数在这里实际上并不需要它,但我们通常将其用作预防措施。

    使用的功能:

    【讨论】:

    • 太棒了 - 谢谢。您能逐步解释一下这是如何工作的吗?
    • 我稍后会。请给我一些时间。我必须离开几个小时:(
    • 谢谢 - 不急!你节省了我的工作时间!
    • 所以,正如我对这个答案的简要解释:如果在 B 列的范围内有逗号分隔的值,他首先使用 split(B2:B,",") 用户正在使用两个单独的电子邮件地址拆分这些单元格。然后他连接B列中的所有单元格,然后连接A列中的所有单元格,在每个值之间添加分隔符|。然后他将他拥有的值数组展平,然后根据分隔符| 拆分这些值。最后,他查询 B 列的值按字母顺序排序,并确保 B 列不为空。
    • “你节省了我的工作时间!”很高兴我能帮上忙“你能解释一下这是如何工作的吗”请查看我的更新答案.
    猜你喜欢
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多