Generate the result table. Here, Tn = T(n-2) & T(n-1) where & is concatenation operator.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 110
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Generate Concatenation Table with Power Query
Power Query solution 1 for Generate Concatenation Table, proposed by Bo Rydobon 🇹🇭:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Rs = Table.FromRows(
List.Transform(
Table.ToRows(Source),
(a) =>
List.Generate(
() => [n = 0, c = Text.From(a{0})],
each a{[n]}? <> null,
each [n = [n] + 1, c = [c] & Text.From(a{[n] + 1})],
each [c]
)
)
)
in
Rs
Power Query solution 2 for Generate Concatenation Table, proposed by Bo Rydobon 🇹🇭:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Res = Table.FromRows(
List.Transform(
Table.ToRows(Source),
each List.Accumulate(_, {}, (s, l) => s & {List.Last({""} & s) & Text.From(l)})
)
)
in
Res
Power Query solution 3 for Generate Concatenation Table, proposed by Aditya Kumar Darak 🇮🇳:
let
Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content],
ColumnCount = List.Count(Table.ColumnNames(Source)),
Calculation = List.Transform(
Table.ToRows(Source),
(f) =>
List.Transform(
{1 .. ColumnCount},
(x) => Text.Combine(List.Transform(List.Range(f, 0, x), (z) => Text.From(z)))
)
),
Result = Table.FromRows(Calculation)
in
Result
Power Query solution 4 for Generate Concatenation Table, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content],
RowList = Table.AddColumn(
Source,
"Custom",
each Text.Combine(List.Transform(Record.ToList(_), each Text.From(_)), "")
)[[Custom]],
Accumulate = List.Accumulate(
{1 .. Table.ColumnCount(Source)},
RowList,
(s, c) => Table.AddColumn(s, "Col" & Text.From(c), each Text.Start([Custom], c))
),
Solucion = Table.RemoveColumns(Accumulate, {"Custom"})
in
Solucion
Power Query solution 5 for Generate Concatenation Table, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
lst = Table.AddColumn(Fonte, "Personalizar", each {1 .. List.Count(Record.FieldValues(_))}),
exp = Table.ExpandListColumn(lst, "Personalizar"),
con = Table.AddColumn(
exp,
"Personalizar.1",
each Text.Combine(List.FirstN(List.Transform(Record.FieldValues(_), Text.From), [Personalizar]))
),
grp = Table.Group(con, {"Coluna1"}, {{"Contagem", each Text.Combine([Personalizar.1], "|")}})[
[Contagem]
],
res = Table.SplitColumn(
grp,
"Contagem",
Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv),
List.Count(Table.ColumnNames(Fonte))
)
in
res
Power Query solution 6 for Generate Concatenation Table, proposed by Bhavya Gupta:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Fn = (l as list) =>
List.Generate(
() => [x = 1, y = l{0}],
each [x] <= List.Count(l),
each [x = [x] + 1, y = [y] & l{[x]}],
each [y]
),
EO = Table.FromRows(List.Transform(Table.ToRows(Source), each Fn(List.Transform(_, Text.From))))
in
EO
Power Query solution 7 for Generate Concatenation Table, proposed by Bhavya Gupta:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Final = Table.FromRows(
Table.TransformRows(
Source,
each List.Skip(
List.Accumulate(Record.ToList(_), {""}, (s, c) => s & {List.Last(s) & Text.From(c)})
)
)
)
in
Final
Power Query solution 8 for Generate Concatenation Table, proposed by Matthias Friedmann:
let
Source = Excel.CurrentWorkbook(){[Name = "Concatenate"]}[Content],
Transform = Table.FromRows(
Table.TransformRows(
Source,
each
let
a = List.Transform(Record.ToList(_), Text.From)
in
List.Generate(
() => [i = 0, x = a{0}],
each [i] <= Table.ColumnCount(Source) - 1,
each [i = [i] + 1, x = [x] & a{i}],
each [x]
)
)
)
in
Transform
Power Query solution 9 for Generate Concatenation Table, proposed by Matthias Friedmann:
let
Source = Excel.CurrentWorkbook(){[Name = "Concatenate"]}[Content],
Custom1 = Table.FromList(
Table.TransformRows(
Source,
each Text.Combine(
List.Transform(
{1 .. Table.ColumnCount(Source)},
(x) => Text.Combine(List.FirstN(List.Transform(Record.ToList(_), Text.From), x))
),
", "
)
)
)
in
Custom1
Power Query solution 10 for Generate Concatenation Table, proposed by Victor Wang:
let
Source = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content],
Custom1 = Table.FromRecords(
Table.TransformRows(
Source,
each
let
l = List.Transform(Record.FieldValues(_), Text.From)
in
Record.FromList(
List.Transform({1 .. List.Count(l)}, each Text.Combine(List.FirstN(l, _))),
Table.ColumnNames(Source)
)
)
)
in
Custom1
Power Query solution 11 for Generate Concatenation Table, proposed by Krzysztof Kominiak:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
ChanType = List.Accumulate(
Table.ColumnNames(Source),
Source,
(S, C) => Table.TransformColumnTypes(S, {{C, type text}})
),
Base = Table.AddColumn(ChanType, "Temp", each Record.ToList(_))[[Temp]],
AccumList = Table.RemoveColumns(
List.Accumulate(
{1 .. Table.ColumnCount(ChanType)},
Base,
(S, C) => Table.AddColumn(S, "C" & Text.From(C), each Text.Combine(List.Range([Temp], 0, C)))
),
"Temp"
)
in
AccumList
Power Query solution 12 for Generate Concatenation Table, proposed by Jan Willem Van Holst:
let
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"LctJCoAwFATRu/Q6G+fDhL9wiLOCIoie3iK4eFDQtPeq5dSgRYeAHoPMeY3UhBkLVmzY43pQ9/85ceHBG9eESpEhR4ESlcw+",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [
Column1 = _t,
Column2 = _t,
Column3 = _t,
Column4 = _t,
Column5 = _t,
Column6 = _t,
Column7 = _t
]
),
#"Added Custom" = Table.AddColumn(
Source,
"Result",
(x) =>
let
myList = Record.ToList(x),
listGen = List.Generate(
() => [counter = 0, cum = myList{0}],
each [counter] < List.Count(myList),
each [counter = [counter] + 1, cum = [cum] & myList{counter}],
each [cum]
),
lastElement = List.Last(listGen)
in
lastElement
)
in
#"Added Custom"
Solving the challenge of Generate Concatenation Table with Excel
Excel solution 1 for Generate Concatenation Table, proposed by Bo Rydobon 🇹🇭:
=LET(
z,
A2:G5,
MID(
SCAN(
,
z,
LAMBDA(
a,
v,
a&v
)
),
SEQUENCE(
ROWS(
z
),
,
,
COLUMNS(
z
)
),
99
)
)
=LEFT(
BYROW(
A2:G5,
LAMBDA(
r,
REDUCE(
,
r,
LAMBDA(
a,
v,
a&v
)
)
)
),
SEQUENCE(
,
COLUMNS(
A2:G5
)
)
)
=LET(
z,
A2:G5,
MAP(
z,
IFNA(
SEQUENCE(
ROWS(
z
)
),
z
),
LAMBDA(
a,
r,
CONCAT(
INDEX(
A2:A5,
r
):a
)
)
)
)
Excel solution 2 for Generate Concatenation Table, proposed by Bo Rydobon 🇹🇭:
=MAP(
A2:G5,
LAMBDA(
a,
CONCAT(
TAKE(
A2:a,
-1
)
)
)
)
Excel solution 3 for Generate Concatenation Table, proposed by Rick Rothstein:
=SCAN(
"",
A2:G2,
LAMBDA(
a,
x,
a&x
)
)
Excel solution 4 for Generate Concatenation Table, proposed by Rick Rothstein:
=HSTACK(
MID(
BYROW(
A2:G5,
LAMBDA(
r,
CONCAT(
r
)
)
),
1,
SEQUENCE(
,
COLUMNS(
A2:G5
)
)
)
)
Excel solution 5 for Generate Concatenation Table, proposed by John V.:
=SCAN(
"",
A2:G5,
LAMBDA(
i,
x,
REPT(
i,
COLUMNS(
A2:x
)>1
)&x
)
)
✅=MID(
CONCAT(
A2:G5
),
{1;2;3;4},
SEQUENCE(
,
7
)
)
Excel solution 6 for Generate Concatenation Table, proposed by محمد حلمي:
=SCAN(
,
A2:G2,
LAMBDA(
a,
d,
a&d
)
)
Excel solution 7 for Generate Concatenation Table, proposed by محمد حلمي:
=TEXTSPLIT(
TEXTJOIN(
"/",
,
BYROW(
A2:G5,
LAMBDA(
a,
CONCAT(
SCAN(
,
a,
LAMBDA(
a,
d,
a&d
)
)&"-"
)
)
)
),
"-",
"/",
1
)
Excel solution 8 for Generate Concatenation Table, proposed by محمد حلمي:
=REDUCE(
,
A2:G2,
LAMBDA(
a,
d,
HSTACK(
a,
TAKE(
a,
,
-1
)&d
)
)
)
Excel solution 9 for Generate Concatenation Table, proposed by محمد حلمي:
=MID(CONCAT(A2:G5),SEQUENCE(4,,,7),SEQUENCE(,7))
Excel solution 10 for Generate Concatenation Table, proposed by محمد حلمي:
=DROP(
REDUCE(
"",
SEQUENCE(
ROWS(
A2:G5
)
),
LAMBDA(
x,
y,
VSTACK(
x,
SCAN(
,
INDEX(
A2:G5,
y,
),
LAMBDA(
a,
d,
a&d
)
)
)
)
),
1
)
Excel solution 11 for Generate Concatenation Table, proposed by 🇰🇷 Taeyong Shin:
=SCAN(
,
A2:G5,
LAMBDA(
a,
b,
REPT(
a,
COLUMNS(
A2:b
)>1
) & b
)
)
Excel solution 12 for Generate Concatenation Table, proposed by 🇰🇷 Taeyong Shin:
= LAMBDA(
range,
[n],
LET(
nth,
IF(
ISOMITTED(
n
),
1,
n
),
CONC,
LAMBDA(
Recd,
LET(
Loop,
LAMBDA(
ME,
range,
n,
LET(
String,
CONCAT(
range
),
txt,
LEFT(
String,
n
),
IF(
n = LEN(
String
),
txt,
HSTACK(
txt,
ME(
ME,
range,
n + 1
)
)
)
)
),
Loop(
Loop,
Recd,
1
)
)
),
Str,
CONC(
INDEX(
range,
nth,
)
),
IF(
nth = ROWS(
ran&ge
),
Str,
VSTACK(
Str,
ROWCONCAT(
range,
nth + 1
)
)
)
)
);
=ROWCONCAT(
A2:G5
)
*************************************************************************
=LET(
Func,
LAMBDA(
n,
SCAN(
,
INDEX(
A2:G5,
n,
),
LAMBDA(
a,
b,
a & b
)
)
),
REDUCE(
Func(
1
),
SEQUENCE(
ROWS(
A2:G5
) - 1
) + 1,
LAMBDA(
a,
n,
VSTACK(
a,
Func(
n
)
)
)
)
)
=MAKEARRAY(
ROWS(
A2:G5
),
COLUMNS(
A2:G5
),
LAMBDA(
r,
c,
CONCAT(
INDEX(
A2:G5,
r,
1
):INDEX(
A2:G5,
r,
c
)
)
)
)
Excel solution 13 for Generate Concatenation Table, proposed by Kris Jaganah:
=LET(
a,
BYROW(
A2:G5,
LAMBDA(
p,
CONCAT(
SCAN(
,
CHAR(
SEQUENCE(
,
COLUMNS(
A2:G2
),
CODE(
p
),
1
)
),
LAMBDA(
x,
y,
x&y
)
)
)
)
),
b,
1+SEQUENCE(
7,
,
0
)+VSTACK(
0,
SCAN(
,
SEQUENCE(
6,
,
0
),
LAMBDA(
x,
y,
x+y
)
)
),
c,
MID(
a,
TRANSPOSE(
b
),
SEQUENCE(
,
7
)
),
c
)
Excel solution 14 for Generate Concatenation Table, proposed by Julian Poeltl:
=TEXTSPLIT(
TEXTJOIN(
"|",
,
BYROW(
A2:G5,
LAMBDA(
A,
TEXTJOIN(
",",
,
SCAN(
,
A,
LAMBDA(
A,
B,
A&B
)
)
)
)
)
),
",",
"|"
)
Excel solution 15 for Generate Concatenation Table, proposed by Aditya Kumar Darak 🇮🇳:
=REDUCE(
A2:A5,
SEQUENCE(
COLUMNS(
A2:G5
) - 1,
,
2
),
LAMBDA(
a,
b,
HSTACK(
a,
TAKE(
a,
,
-1
) & INDEX(
A2:G5,
,
b
)
)
)
)
Excel solution 16 for Generate Concatenation Table, proposed by Aditya Kumar Darak 🇮🇳:
=MAKEARRAY(
ROWS(
A2:G5
),
COLUMNS(
A2:G5
),
LAMBDA(
r,
c,
CONCAT(
TAKE(
INDEX(
A2:G5,
r,
0
),
,
c
)
)
)
)
Excel solution 17 for Generate Concatenation Table, proposed by Timothée BLIOT:
=LET(
A,
A2:G5,
MAKEARRAY(
ROWS(
A
),
COLUMNS(
A
),
LAMBDA(
x,
y,
CONCAT(
INDEX(
A,
x,
SEQUENCE(
y
)
)
)
)
)
)
Another option:
=TEXTSPLIT(
TEXTJOIN(
"/",
1,
BYROW(
A2:G5,
LAMBDA(
x,
TEXTJOIN(
",",
1,
SCAN(
,
x,
LAMBDA(
a,
v,
a&v
)
)
)
)
)
),
",",
"/"
)
Excel solution 18 for Generate Concatenation Table, proposed by Duy Tùng:
=LEFT(BYROW(A2:G5,CONCAT),COLUMN(A2:G2))
Excel solution 19 for Generate Concatenation Table, proposed by Bhavya Gupta:
=LET(
rng,
A3:G6,
a,
BYROW(
rng,
LAMBDA(
x,
CONCAT(
x
)
)
),
c,
COLUMNS(
rng
),
b,
SEQUENCE(
,
c
),
MAP(
IFNA(
a,
b
),
IFNA(
b,
a
),
LAMBDA(
q,
w,
REPLACE(
q,
w+1,
c-w,
""
)
)
)
)
Excel solution 20 for Generate Concatenation Table, proposed by Bhavya Gupta:
=MAKEARRAY(
ROWS(
A2:G5
),
COLUMNS(
A2:G5
),
LAMBDA(
r,
c,
CONCAT(
TAKE(
CHOOSEROWS(
A2:G5,
r
),
,
c
)
)
)
)
Excel solution 21 for Generate Concatenation Table, proposed by Md. Zohurul Islam:
=LET(
z,
A2:G5,
A,
BYROW(
z,
LAMBDA(
z,
TEXTJOIN(
"/",
,
SCAN(
"",
z,
LAMBDA(
x,
y,
x&y
)
)
)
)
),
B,
DROP(
REDUCE(
"",
A,
LAMBDA(
p,
q,
VSTACK(
p,
TEXTSPLIT(
q,
"/"
)
)
)
),
1
),
B
)
Excel solution 22 for Generate Concatenation Table, proposed by Charles Roldan:
=LET(
Mat,
A2:G5,
MAKEARRAY(
ROWS(
Mat
),
COLUMNS(
Mat
),
LAMBDA(
r,
c,
CONCAT(
TAKE(
CHOOSEROWS(
Mat,
r
),
,
c
)
)
)
)
)
=TEXTSPLIT(
TEXTJOIN(
";" ,
,
BYROW(
A2:G5,
LAMBDA(
x,
TEXTJOIN(
"," ,
,
SCAN(
,
x,
LAMBDA(
a,
b,
a&b
)
)
)
)
)
),
"," ,
";"
)
Excel solution 23 for Generate Concatenation Table, proposed by Jaroslaw Kujawa:
=LET(
a,
data,
b,
LEFT(
BYROW(
a,
LAMBDA(
d,
CONCAT(
d
)
)
),
SEQUENCE(
,
COLUMNS(
a
)
)
),
b
)
With text/non-text:
=LET(
a,
data,
b,
IF(
NOT(
ISNUMBER(
TAKE(
a,
,
1
)
)
),
LEFT(
BYROW(
a,
LAMBDA(
c,
CONCAT(
c
)
)
),
SEQUENCE(
,
COLUMNS(
a
)
)
),
--LEFT(
BYROW(
a,
LAMBDA(
c,
CONCAT(
c
)
)
),
SEQUENCE(
,
COLUMNS(
a
)
)
)
),
b
)
Excel solution 24 for Generate Concatenation Table, proposed by 🇮🇷 Navid Esmaeilzadeh اسماعیل زاده:
={MID(
CONCAT(
$A2:$G2
),
1,
COLUMN(
A1:G1
)
)
Excel solution 25 for Generate Concatenation Table, proposed by Stefan Olsson:
=BYROW(
A2:G5,
LAMBDA(
rr,
SCAN(
"",
rr,
LAMBDA(
a,
b,
a&b
)
)
)
)
Excel solution 26 for Generate Concatenation Table, proposed by Victor Momoh (MVP, MOS, R.Eng):
=LET(
p,
A2:G5,
DROP(
REDUCE(
"",
ROW(
p
),
LAMBDA(
x,
y,
VSTACK(
x,
SCAN(
"",
INDEX(
p,
y-1,
0
),
LAMBDA(
a,
b,
a&b
)
)
)
)
),
1
)
)
Excel solution 27 for Generate Concatenation Table, proposed by Abhishek Kumar Jain:
=P2&A2 (Put this in Q2 and drag all the way right and down till the array limits the old fashioned way)
Option 2:
=TEXTSPLIT(
TEXTJOIN(
" ",
FALSE,
BYROW(
A2:G5,
LAMBDA(
a,
TEXTJOIN(
"|",
FALSE,
SCAN(
"",
a,
LAMBDA(
x,
y,
x&y
)
)
)
)
)
),
"|",
" "
)
Excel solution 28 for Generate Concatenation Table, proposed by Guillermo Arroyo:
=SCAN(
"",
A2:G5,
LAMBDA(
a,
b,
IF(
COLUMNS(
A2:b
)=1,
b,
a&b
)
)
)
Excel solution 29 for Generate Concatenation Table, proposed by roberto mensa:
=MID(TEXTJOIN(
,
,
rng
),
MMULT(--(ROW(
OFFSET(
rng,
,
1
)
)>TRANSPOSE(
ROW(
OFFSET(
rng,
,
1
)
)
)),
MMULT(
LEN(
rng
),
TRANSPOSE(
COLUMN(
rng
)^0
)
))+1,
TRANSPOSE(MMULT(--(COLUMN(
rng
)<=TRANSPOSE(
COLUMN(
rng
)
)),
TRANSPOSE(
LEN(
rng
)
))))
Excel solution 30 for Generate Concatenation Table, proposed by Enrico Giorgi:
=TEXTJOIN(
"",
TRUE,
INDEX(
$A$2:$A$5,
ROW(
1:4
),
1
):INDEX(
$A$2:$G$7,
ROW(
1:4
),
COLUMN(
1:7
)
)
)
ITALIAN VERSION
=TESTO.UNISCI(
"";VERO;INDICE(
$A$2:$A$5;RIF.RIGA(
1:4
);1
):INDICE(
$A$2:$G$7;RIF.RIGA(
1:4
);RIF.COLONNA(
1:7
)
)
)
Excel solution 31 for Generate Concatenation Table, proposed by Tushar Mehta:
=LET(
rslt,
SCAN(
,
A2:G5,
LAMBDA(
a,
c,
a&c
)
),
RIGHT(
rslt,
MOD(
LEN(
rslt
)-1,
7
)+1
)
)
Excel solution 32 for Generate Concatenation Table, proposed by Aniket T.:
=mid(concatenate ($A2,
$B2,
$C2,
$D2,
$E2,
$F2,
$G2),
1,
Counta(
$A2:A2
))
Solving the challenge of Generate Concatenation Table with Excel VBA
Excel VBA solution 1 for Generate Concatenation Table, proposed by Md. Zohurul Islam:
Sub ExcelCHallenge110()
Dim nr As Long, r As Long
Dim nc As Long, c As Long
Dim a, b, d, result
Dim rng As Range
'headers
Range("I1") = "VBA Solution"
Set rng = Range("A2:G5")
'step2
nr = rng.Rows.Count
nc = rng.Columns.Count
For r = 1 To nr
Range("I" & r + 1) = Cells(r + 1, 1).Value
For c = 1 To nc
a = Cells(r + 1, c + 0).Value
b = Cells(r + 1, c + 8).Offset(0, -1).Value
result = b & a
'post
Cells(r + 1, c + 8).NumberFormat = "@"
Cells(r + 1, c + 8) = result
Next c
Next r
End Sub
Solving the challenge of Generate Conc&atenation Table with SQL
SQL solution 1 for Generate Concatenation Table, proposed by Zoran Milokanović:
WITH /* Microsoft SQL Server 2019 */
DATA_PREP
AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS ORDINAL_NUMBER
,P.A, P.B, P.C, P.D, P.E, P.F, P.G
FROM PROBLEM P
),
TRANSPOSE
AS
(
SELECT
P.COL
,P.[1], P.[2], P.[3], P.[4]
FROM
(
SELECT
U.ORDINAL_NUMBER, U.COL, U.VALUE
FROM DATA_PREP DP
UNPIVOT
(
VALUE FOR COL IN (A, B, C, D, E, F, G)
) U
) T
PIVOT
(
MAX(T.VALUE)
FOR T.ORDINAL_NUMBER IN ([1], [2], [3], [4])
) P
),
CALCULATION
AS
(
SELECT
T2.COL
,STRING_AGG(T1.[1], '') AS [1]
,STRING_AGG(T1.[2], '') AS [2]
,STRING_AGG(T1.[3], '') AS [3]
,STRING_AGG(T1.[4], '') AS [4]
FROM TRANSPOSE T1
JOIN TRANSPOSE T2 ON T1.COL <= T2.COL
GROUP BY
T2.COL
)
SELECT
P.A AS I, P.B AS J, P.C AS K, P.D AS L, P.E AS M, P.F AS N, P.G AS O
FROM
(
SELECT
U.ORDINAL_NUMBER, U.COL, U.VALUE
FROM CALCULATION C
UNPIVOT
(
VALUE FOR ORDINAL_NUMBER IN ([1], [2], [3], [4])
) U
) T
PIVOT
(
MAX(T.VALUE)
FOR T.COL IN ([A], [B], [C], [D], [E], [F], [G])
) P
;
&
