通过拆分给定计算范围的列,将每一行分解为多行

Explode each row into multiple rows by splitting a column of a given computed range

我最近的任务是 'exploding' 给定范围内的每一行相对于其中一列的拆分值,即从

Name Interests Age
John swimming, movies 31
Mary basketball 26
Richard football, music 21

至:

Name Interest Age
John swimming 31
John movies 31
Mary basketball 26
Richard football 21
Richard music 21

有点类似于笛卡尔积,只是需要根据Interests列中的值计算其中一项。我最终使用 Apps 脚本函数解决了它,但我想知道是否可以使用常规公式轻松解决它。

请注意,我的输入范围是另一个公式的乘积(准确地说是 QUERY(...)),因此在电子表格中不一定是连续的或可寻址的。

有什么想法吗?

您可以使用自定义的“UNPIVOT”函数found on this sheet. File>Make a Copy to grab the script. Also here on github.

=ARRAYFORMULA(UNPIVOT(A2:A,"V",SPLIT(B2:B,", ",0),"B",C2:C,"V"))

然后您将 QUERY() 输出以消除第二列中没有任何内容的行。

尝试:

=INDEX(QUERY(SPLIT(FLATTEN(A1:A&"×"&SPLIT(B1:B, ", ", )&"×"&C1:C), "×"),
 "where Col3 is not null"))