将所有数字从 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",""),"")
我有一个由两个不同字符分隔的数字字段。我试图将这些数字拆分到它们自己的字段中。
当前数据示例:
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",""),"")