使用公式循环遍历列和 vstack 到新的单列

dsa*_*uce 2 excel excel-formula

我有一列字符串,示例如下。每个字符串都是分隔的文本组合。每行都有不同数量的文本。我想基于该列创建一列,每行一个文本。

从:

a;b
x;y;z
p;q;r;s;t
Run Code Online (Sandbox Code Playgroud)

到:

a
b
x
y
z
p
q
r
s
t
Run Code Online (Sandbox Code Playgroud)

如何使用单个公式实现这一目标?

我尝试过TRANSPOSE(TEXTSPLIT(TEXTJOIN(";",TRUE, data),";")) 但是失败了,因为 TEXTJOIN 部分导致超过 32767 个字符。

我还尝试构建 mxn 的二维数组,其中 m=no。原始数据中的行数,且 n=no。的文本。但是,MAKEARRAY 仍然会生成单个列。如果它有效,我会使用 TOCOL 或类似的东西来转换为单列。

=MAKEARRAY(ROWS(data),COLUMNS(MAX(num_of_texts_in_each_row)), LAMBDA(r,c, LET(
drow, INDEX(data,r,1),
splits, TEXTSPLIT(drow,";"),
INDEX(splits,,c)
)))
Run Code Online (Sandbox Code Playgroud)

P.b*_*P.b 5

另一种方法是使用 REDUCE:

=DROP(REDUCE(0,A1:A3,LAMBDA(a,b,VSTACK(a,TEXTSPLIT(b,,";")))),1)

在此输入图像描述

REDUCE 的行为类似于 BYROW,其中 VSTACK 在完整溢出值之后将每行的溢出结果堆叠在一起。由于它从 0 开始,我们使用 DROP 第一个值来获得所需的结果。

我们也可以避免 DROP,但这会使公式更复杂、更长,但仅供参考: =REDUCE(TEXTSPLIT(A1,,";"),A2:A3,LAMBDA(a,b,VSTACK(a,TEXTSPLIT(b,,";"))))