Assuming per tag listed there is no excel version constraint, you can use the following formula in C1
:
=LET(cols, INDEX(TRANSPOSE(TEXTSPLIT(A1,":",";")),1,), n, COLUMNS(cols),
REDUCE(cols, A1:A2, LAMBDA(ac, a, LET(arr, TRANSPOSE(TEXTSPLIT(a,":",";")),
aCols, INDEX(arr,1,), by_arr, XLOOKUP(aCols, cols, SEQUENCE(1,n)),
VSTACK(ac, SORTBY(INDEX(arr,2,), by_arr))))))
Here is the output:

Explanation
We use TEXTSPLIT
to convert to an array the cell information. For example for the first cell, the following formula:
=TRANSPOSE(TEXTSPLIT(A1,":",";"))
produces the following output:
key a key b key c
111 Abc xyz
Via INDEX
function we get the first row of previous array and name it cols
. It represents the column names. Since for the following input rows the information can appear in different order, we use cols
as a reference to find the permutation required on each iteration to get the information in the correct order. We use for that SORTBY
function.
We use REDUCE/VSTACK
pattern. Check for example: how to transform a table in Excel from vertical to horizontal but with different length to add on each iteration a new row via VSTACK
with the values in the correct order.
On each iteration (a
) for the input range A1:A2
we convert the information into 2D array (arr
), where the first row is the header (aCol
) and the second row the corresponding values (INDEX(arr,2,)
).
The output of XLOOKUP
(by_arr
) has the corresponding permutation of the columns (aCol
) with the respect to the first column cols
. Then finally VSTACK
adds on each iteration the values in the correct order.