将所有数字从 1 个单元格提取到多个单元格

Extract all numbers from 1 cell to many cells

我有一个由两个不同字符分隔的数字字段。我试图将这些数字拆分到它们自己的字段中。

当前数据示例:

A
----
25-29
18-20,22,2
3,6
5,16-19
2-5,9-12
1,2,3,4

预期结果

B-E 将处理“-”两边的数字

F-我会自己处理任何可能的数字

B     |  C     |  D     |  E     |  F     |  G     |  H     |  I 
----------------------------------------------------------------------
25       29
18       20                         22       2
                                    3        6
16       19                         5
2        5        9        12   
                                    1        2        3        4

我试过使用 MID LEFT FIND 的不同组合,但我似乎无法弄明白。我知道所有 8 列都需要一个不同的公式,但我很难弄明白。

在此方面的任何帮助都非常感谢。

谢谢

使用最新的 ms365 BETA-functions,您可以尝试:

B1中的公式:

=LET(X,TEXTSPLIT(SUBSTITUTE(A1,"-","*"),","),Y,EXPAND(TEXTSPLIT(TEXTJOIN("*",,FILTER(X,ISERROR(--X),"*")),"*"),,4,""),Z,FILTER(X,ISNUMBER(--X),""),HSTACK(Y,Z))

或者,不那么冗长:

=LET(X,EXPAND(TEXTSPLIT(A1,"-",",",,""),,2,""),HSTACK(EXPAND(IFERROR(TOROW(FILTER(X,INDEX(X,0,2)<>"")),""),,4,""),TOROW(FILTER(X,INDEX(X,0,2)="",""))))

没有TEXTSPLIT()但有office365的人:

=LET(str,"<t><s>"&SUBSTITUTE(SUBSTITUTE(A1,"-","*")&",a*a,a*a",",","</s><s>")&"</s></t>",X,FILTERXML(str,"//s[.*0!=0][position()<3]"),Y,IFERROR(FILTERXML(str,"//s[.*0=0]"),""),SUBSTITUTE(TRANSPOSE(FILTERXML("<t><s>"&SUBSTITUTE(TEXTJOIN("*",,X,Y),"*","</s><s>")&"</s></t>","//s")),"a",""))

对于那些没有 ms365 但有 Excel 2019 的人,他们可以使用这个 CSE-formula 并开始拖动:

=IFERROR(SUBSTITUTE(FILTERXML("<t><s>"&SUBSTITUTE(TEXTJOIN("*",,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE($A1,"-","*")&",a*a,a*a",",","</s><s>")&"</s></t>","//s[.*0!=0][position()<3]"),IFERROR(FILTERXML("<t><s>"&SUBSTITUTE($A1,",","</s><s>")&"</s></t>","//s[.*0=0]"),"")),"*","</s><s>")&"</s></t>","//s["&COLUMN(A1)&"]"),"a",""),"")