通过拆分给定计算范围的列,将每一行分解为多行
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"))
我最近的任务是 '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"))