In the question table, texts are provided for different groups. Divide all the texts of each group into two columns respectively. For example, in group C, texts t9 and t10 are available. So t9 is provided in column 1 and t10 is provided in column 2 in result table.
📌 Challenge Details and Links
Challenge Number: 94
Challenge Difficulty: ⭐⭐⭐
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Two-Column Text! with Power Query
Power Query solution 1 for Two-Column Text!, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content],
S = Table.FromList(
List.Combine(
Table.Group(
Source,
"Group",
{
"R",
each
let
T = Table.ToColumns(_)
in
List.Transform(List.Split(T{1}, 2), each {T{0}{0}} & _)
}
)[R]
),
each _,
{"Group", "Column 1", "Column 2"}
)
in
S
Power Query solution 2 for Two-Column Text!, proposed by Zoran Milokanović:
let
Source = Table.ToColumns(Excel.CurrentWorkbook(){[Name = "Input"]}[Content]),
S = Table.FromRows(
List.TransformMany(
List.Distinct(Source{0}),
each
let
f = (p) => List.PositionOf(Source{0}, _, p)
in
List.Split(List.Range(Source{1}, f(0), f(1) - f(0) + 1), 2),
(i, _) => {i} & List.FirstN(_ & {null}, 2)
),
{"Group", "Column 1", "Column 2"}
)
in
S
Power Query solution 3 for Two-Column Text!, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content],
S = Table.FromColumns(
List.Zip(
List.Combine(
Table.Group(
Source,
"Group",
{
"R",
each
let
T = Table.ToColumns(_)
in
List.Transform(List.Split(T{1}, 2), each {T{0}{0}} & _)
}
)[R]
)
),
{"Group", "Column 1", "Column 2"}
)
in
S
Power Query solution 4 for Two-Column Text!, proposed by Pavel Adam:
let
outputColumnCount = 2,
customGroup = Table.Group(
input,
{"Group"},
{
{
"AllRows",
each [
subList = _[Text],
actGroup = _[Group]{0},
prepList = List.Split(subList, outputColumnCount),
transformedList = List.Transform(
prepList,
(actRow) =>
[
listSize = List.Count(actRow),
out1 =
if listSize = outputColumnCount then
actRow
else
actRow & List.Repeat({null}, outputColumnCount - listSize)
][out1]
),
out = Table.AddColumn('#'table(null, transformedList), "Group", each actGroup, type text)
][out]
}
}
),
finalOut = Table.Combine(customGroup[AllRows])
in
finalOut
Power Query solution 5 for Two-Column Text!, proposed by 🇵🇪 Ned Navarrete C.:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Grouped = Table.Group(
Source,
{"Group"},
{{"X",
each [a=List.Split(
[Text],
2
),
b =Table.FromColumns(
a
),
c=Table.Transpose(
b
)][c]}}
),
Expand = Table.ExpandTableColumn(
Grouped,
"X",
{"Column1",
"Column2"}
)
in
Expand
Power Query solution 6 for Two-Column Text!, proposed by Brian Julius:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Group = Table.ExpandTableColumn(
Table.Group(Source, {"Group"}, {{"All", each Table.AddIndexColumn(_, "Index", 0, 1)}}),
"All",
{"Text", "Index"},
{"Text", "Index"}
),
AddModulo = Table.AddColumn(
Group,
"Modulo",
each "Column " & Text.From(Number.Mod([Index], 2) + 1)
),
Pivot = Table.RemoveColumns(
Table.Pivot(AddModulo, List.Distinct(AddModulo[Modulo]), "Modulo", "Text"),
"Index"
),
PartitionPiv = Table.Partition(
Pivot,
"Group",
List.Count(List.Distinct(Pivot[Group])),
each List.PositionOf(List.Distinct(Pivot[Group]), _)
),
CleanNulls = List.Transform(
List.Transform(PartitionPiv, each List.Transform(Table.ToColumns(_), each List.RemoveNulls(_))),
each Table.SelectRows(Table.FromColumns(_), each [Column2] <> null)
),
ToTable = Table.ExpandTableColumn(
Table.FromList(CleanNulls, Splitter.SplitByNothing(), {"Z"}),
"Z",
{"Column1", "Column2", "Column3"},
{"Group", "Column1", "Column2"}
)
in
ToTable
Power Query solution 7 for Two-Column Text!, proposed by Eric Laforce:
let
Source = Excel.CurrentWorkbook(){[Name = "tData"]}[Content],
NbCol = 2,
CN = {"Group"} & List.Transform({1 .. NbCol}, each "Column " & Text.From(_)),
Group = Table.Group(
Source,
"Group",
{
"G",
each
let
_G = [Group]{0}
in
List.Transform(
List.Split([Text], NbCol),
each {_G} & _ & List.Repeat({null}, NbCol - List.Count(_))
)
}
),
Result = Table.FromRows(List.Combine(Group[G]), CN)
in
Result
Power Query solution 8 for Two-Column Text!, proposed by Ramiro Ayala Chávez:
let
S = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
a = Table.Group(S,{"Group"},{"G", each Table.FromColumns(List.Zip(List.Split([Text],2)))}),
Sol = Table.ExpandTableColumn(a,"G",{"Column1","Column2"},{"Column 1","Column 2"})
in
Sol
Power Query solution 9 for Two-Column Text!, proposed by Aditya Kumar Darak 🇮🇳:
let
Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content],
Group = Table.Group(
Source,
"Group",
{"A", each [S = List.Split([Text], 2), T = Table.FromList(S, each _, {"Text1", "Text2"})][T]}
),
Return = Table.ExpandTableColumn(Group, "A", {"Text1", "Text2"})
in
Return
Power Query solution 10 for Two-Column Text!, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Group = Table.Group(Source, {"Group"}, {{"All", each
Table.FromColumns(List.Zip(List.Split([Text],2)))}}),
Sol = Table.ExpandTableColumn(Group, "All", Table.ColumnNames(Group[All]{0}))
in
Sol
Power Query solution 11 for Two-Column Text!, proposed by Yaroslav Drohomyretskyi:
let
Source = Excel.CurrentWorkbook(){[Name = "Таблиця1"]}[Content],
Group = Table.Group(
Source,
{"Group"},
{
{
"x",
each Table.FromColumns({List.Alternate(_[Text], 1, 1, 1), List.Alternate(_[Text], 1, 1, 0)})
}
}
),
Expand = Table.ExpandTableColumn(Group, "x", {"Column1", "Column2"}, {"Column1", "Column2"})
in
Expand
Power Query solution 12 for Two-Column Text!, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
A = Table.TransformColumnTypes(Source, {{"Group", type text}, {"Text", type text}}),
B = Table.Group(
A,
{"Group"},
{{"tbl", each _, type table [Group = nullable text, Text = nullable text]}}
),
F = (x) =>
let
b = Table.AddIndexColumn(x, "Index", 1, 1, Int64.Type),
c = Table.AddColumn(
b,
"Column",
each if Number.Mod([Index], 2) = 1 then "Column1" else "Column2"
),
d = Table.AddColumn(c, "N", each if [Column] = "Column1" then [Index] else null),
e = Table.FillDown(d, {"N"}),
f = Table.RemoveColumns(e, {"Index"}),
g = Table.Pivot(f, List.Distinct(f[Column]), "Column", "Text"),
h = Table.RemoveColumns(g, {"N"})
in
h,
C = Table.AddColumn(B, "F", each F([tbl])),
D = Table.SelectColumns(C, {"F"}),
E = Table.ExpandTableColumn(
D,
"F",
{"Group", "Column1", "Column2"},
{"Group", "Column1", "Column2"}
)
in
E
Solving the challenge of Two-Column Text! with Excel
Excel solution 1 for Two-Column Text!, proposed by محمد حلمي:
=REDUCE(
H2:J2,
UNIQUE(
B3:B13
),
LAMBDA(
a,
v,
IFNA(
VSTACK(
a,
HSTACK(
v,
WRAPROWS(
FILTER(
C3:C13,
B3:B13=v
),
2,
""
)
)
),
v
)
)
)
Excel solution 2 for Two-Column Text!, proposed by محمد حلمي:
=REDUCE(
HSTACK(
B2,
"Column "&{1,
2}
), UNIQUE(
B3:B13
),
LAMBDA(
a,
v,
IFNA(
VSTACK(
a,
HSTACK(
v,
WRAPROWS(
FILTER(
C3:C13,
B3:B13=v
),
2,
""
)
)
),
v
)
)
)
Excel solution 3 for Two-Column Text!, proposed by محمد حلمي:
=REDUCE(H2:J2,
B3:B13,
LAMBDA(a,
v,
LET(
e,
OFFSET(
v,
,
1
),
IFNA(UNIQUE(VSTACK(a,
IF((v=OFFSET(
v,
1, ))*
ISODD(
COUNTIF(
v:B3,
v
)
),
HSTACK(
v,
e,
OFFSET(
v,
1,
1
)
),IF(
OR(
e=TAKE(
a,
-1
)
),
a,
HSTACK(
v,
e
)
)))),
""))))
Excel solution 4 for Two-Column Text!, proposed by 🇵🇪 Ned Navarrete C.:
=REDUCE(
H2:J2,
UNIQUE(
B3:B13
),
LAMBDA(
c,
v,
IFNA(
VSTACK(
c,
IFNA(
HSTACK(
v,
WRAPROWS(
FILTER(
C3:C13,
B3:B13=v
),
2,
""
)
),
v
)
),
""
)
)
)
Excel solution 5 for Two-Column Text!, proposed by Oscar Mendez Roca Farell:
=REDUCE(
HSTACK(
B2,
"Column"&{1,
2}
),
UNIQUE(
B3:B13
),
LAMBDA(
i,
x,
LET(
w,
WRAPROWS(
FILTER(
C3:C13,
B3:B13=x
),
2
),
IFNA(
VSTACK(
i,
HSTACK(
REPT(
x,
SEQUENCE(
ROWS(
w
)
)^0
),
w
)
),
""
)
)
)
)
Excel solution 6 for Two-Column Text!, proposed by Julian Poeltl:
=LET(
G,
B3:B13,
T,
C3:C13,
U,
UNIQUE(
G
),
R,
IFNA(
DROP(
REDUCE(
"",
SEQUENCE(
ROWS(
U
)
),
LAMBDA(
A,
B,
VSTACK(
A,
WRAPROWS(
FILTER(
T,
G=INDEX(
U,
B
)
),
2,
""
)
)
)
),
1
),
""
),
VSTACK(
HSTACK(
"Group",
"Column 1",
"Column 2"
),
HSTACK(
XLOOKUP(
TAKE(
R,
,
1
),
T,
G
),
R
)
)
)
Excel solution 7 for Two-Column Text!, proposed by Kris Jaganah:
=LET(
a,
B3:B13,
b,
C3:C13,
c,
SEQUENCE(
ROWS(
a
)
)-XMATCH(
a,
a
)+1,
d,
ROUNDUP(
c/2,
0
),
e,
MOD(
c-1,
2
)+1,
f,
DROP(
PIVOTBY(
a&d,
e,
b,
CONCAT,
0,
0,
,
0
),
1
),
VSTACK(
{"Group",
"Column 1",
"Column 2"},
HSTACK(
LEFT(
TAKE(
f,
,
1
)
),
DROP(
f,
,
1
)
)
)
)
Excel solution 8 for Two-Column Text!, proposed by Imam Hambali:
=LET( g,
B3:B13, ug,
UNIQUE(
g
), t,
C3:C13, a,
HSTACK(
ug,
IF(
MOD(
COUNTIFS(
g,
ug
),
2
)=1,
"",
NA()
)
), b,
WRAPROWS(
TOCOL(
TAKE(
SORT(
VSTACK(
HSTACK(
g,
t
),
a
),
1
),
,
-1
),
3
),
2
), HSTACK(
XLOOKUP(
TAKE(
b,
,
1
),
t,
g
),
b
))
Excel solution 9 for Two-Column Text!, proposed by Sunny Baggu:
=IFNA( REDUCE( {"Group",
"Column 1",
"Column 2"}, UNIQUE(
B3:B13
), LAMBDA(
a,
v,
VSTACK(
a,
IFNA(
HSTACK(
v,
WRAPROWS(
FILTER(
C3:C13,
B3:B13 = v
),
2,
""
)
),
v
)
)
) ), "")
Excel solution 10 for Two-Column Text!, proposed by Andy Heybruch:
=LET( _groups,
UNIQUE(
B3:B13
), _text,
B3:B13&"|"&C3:C13, _split,
DROP(
IFERROR(
REDUCE(
"",
_groups,
LAMBDA(
a,
v,
VSTACK(
a,
WRAPROWS(
FILTER(
_text,
LEFT(
_text
)=v
),
2
)
)
)
),
""
),
1
), IFERROR(
HSTACK(
TEXTBEFORE(
TAKE(
_split,
,
1
),
"|"
),
TEXTAFTER(
TAKE(
_split,
,
1
),
"|"
),
TEXTAFTER(
TAKE(
_split,
,
-1
),
"|"
)
),
""
)
)
Excel solution 11 for Two-Column Text!, proposed by Ankur Sharma:
=LET(
a,
B3:B13,
b,
UNIQUE(
a
),
c,
a & "@" & C3:C13,
d,
WRAPROWS(
TEXTSPLIT(
TEXTJOIN(
"$",
,
MAP(
b,
LAMBDA(
z,
TEXTJOIN(
"$",
FALSE,
WRAPROWS(
FILTER(
c,
a = z
),
2,
""
)
)
)
)
),
,
"$"
),
2,
""
),
HSTACK(
TAKE(
TEXTBEFORE(
d,
"@"
),
,
1
),
TEXTAFTER(
d,
"@",
,
,
,
""
)
)
)
Excel solution 12 for Two-Column Text!, proposed by Asheesh Pahwa:
=IFNA(
DROP(
REDUCE(
"",
UNIQUE(
B3:B13
),
LAMBDA(
x,
y,
VSTACK(
x,
LET(
f,
FILTER(
C3:C13,
B3:B13=y
),
w,
WRAPROWS(
f,
2,
""
),
IFNA(
HSTACK(
y,
w
),
y
)
)
)
)
),
1
),
""
)
Excel solution 13 for Two-Column Text!, proposed by Bilal Mahmoud kh.:
=IFNA(
REDUCE(
{"Group",
"C1",
"C2"},
UNIQUE(
B3:B13
),
LAMBDA(
x,
y,
VSTACK(
x,
HSTACK(
TEXTSPLIT(
REPT(
y&",",
ROUNDUP(
COUNTA(
FILTER(
B3:B13,
B3:B13=y
)
)/2,
0
)
),
,
",",
TRUE
),
WRAPROWS(
FILTER(
C3:C13,
B3:B13=y
),
2
)
)
)
)
),
""
)
Excel solution 14 for Two-Column Text!, proposed by Eddy Wijaya:
=LET( init,
B3:B13, counter,
ROUNDUP(
MAP(
UNIQUE(
init
),
LAMBDA(
m,
ROWS(
FILTER(
init,
init=m
)
)
)
)/2,
0
), adjGroup,
REPT(
UNIQUE(
init
)&",",
counter
), REDUCE(
H2:J2,
adjGroup,
LAMBDA(
a,
v,
IFNA(
VSTACK(
a,
LET(
split,
TEXTSPLIT(
v,
,
",",
TRUE
),
val,
WRAPROWS(
FILTER(
C3:C13,
init=UNIQUE(
split
)
),
2,
""
),
HSTACK(
split,
val
)
)
),
""
)
)
)
)
Excel solution 15 for Two-Column Text!, proposed by El Badlis Mohd Marzudin:
=LET(
d,
B3:B13,
DROP(
IFNA(
REDUCE(
"",
UNIQUE(
d
),
LAMBDA(
v,
w,
VSTACK(
v,
LET(
a,
WRAPROWS(
FILTER(
C3:C13,
d=w
),
2
),
b,
EXPAND(
w,
ROWS(
a
),
,
w
),
HSTACK(
b,
a
)
)
)
)
),
""
),
1
)
)
Excel solution 16 for Two-Column Text!, proposed by ferhat CK:
=LET(
gr,
B3:B13,
tx,
C3:C13,
a,
UNIQUE(
gr
),
d,
WRAPROWS(
DROP(
REDUCE(
TOCOL(
WRAPROWS(
FILTER(
tx,
gr="a"
),
2,
""
)
),
a,
LAMBDA(
x,
y,
VSTACK(
x,
TOCOL(
WRAPROWS(
FILTER(
tx,
gr=y
),
2,
""
)
)
)
)
),
4
),
2,
""
),
HSTACK(
XLOOKUP(
CHOOSECOLS(
d,
1
),
tx,
gr
),
d
)
)
Excel solution 17 for Two-Column Text!, proposed by Hussein SATOUR:
=TEXTSPLIT(
CONCAT(
MAP(
UNIQUE(
B3:B13
),
LAMBDA(
x,
SUBSTITUTE(
"|"&TEXTJOIN(
{"/",
"|"},
,
FILTER(
C3:C13,
B3:B13=x
)
),
"|",
"|"&x&"/"
)
)
)
),
"/",
"|",
1,
,
""
)
