Split each cell value and expand it according to the specified rule
The following table records someone’s answers to a set of questions:
D |
E |
|
1 |
Form Question |
Form Answer |
2 |
1 |
All of the Above |
3 |
2 |
A;B;C |
4 |
3 |
B;C |
5 |
4 |
All of the Above |
An answer generally consists of options separated by the semicolon. If it is string “All of the Above”, it has all options under the same question number in dictionary table Sheet2.
A |
B |
|
1 |
1 |
A |
2 |
1 |
b |
3 |
1 |
c |
4 |
1 |
d |
5 |
2 |
a |
6 |
2 |
b |
7 |
2 |
c |
8 |
2 |
d |
9 |
3 |
a |
10 |
3 |
b |
11 |
3 |
c |
12 |
3 |
d |
13 |
4 |
a |
14 |
4 |
b |
15 |
4 |
c |
16 |
4 |
d |
17 |
4 |
e |
We need to split each answer into individual options, as shown below:
A |
B |
|
1 |
Question |
What I want |
2 |
1 |
A |
3 |
1 |
b |
4 |
1 |
c |
5 |
1 |
d |
6 |
2 |
A |
7 |
2 |
B |
8 |
2 |
C |
9 |
3 |
B |
10 |
3 |
C |
11 |
4 |
a |
12 |
4 |
b |
13 |
4 |
c |
14 |
4 |
d |
15 |
4 |
e |
Use SPL XLL to enter the following formula:
=spl("=dt=?1,dc=?2,E@b(dt.news(if(~(2)==$[All of the Above],dc.select(~(1)==dt.~(1)).(~(2)), ~(2).split($[;]));dt.~(1),~))",D2:E5,Sheet2!A2:Sheet2!B18)
E@b converts an Excel table to a sequence. ~(1) represents the 1st child member of the current member in a sequence; $[] represents a string.
Source:https://www.reddit.com/r/excel/comments/1cueofb/how_could_i_split_up_text_in_one_cell_over/
SPL Official Website 👉 https://www.scudata.com
SPL Feedback and Help 👉 https://www.reddit.com/r/esProc_Desktop/
SPL Learning Material 👉 https://c.scudata.com
Discord 👉 https://discord.gg/cFTcUNs7
Youtube 👉 https://www.youtube.com/@esProcDesktop
Linkedin Group 👉 https://www.linkedin.com/groups/14419406/