如何从字符串中提取数字并用逗号(或其他分隔符)分隔它们(替换、替换、擦除、isnumber、remove、delete...)

MsG*_*ker 0 extract auto-detect find-and-replace microsoft-excel search-indexing

我需要从 Excel 中的字符串中提取数字,并且数字需要用逗号分隔,如第 3 行(或任何其他分隔符)所示。

在此处输入图片说明

我可以通过以下方式提取第 1 行中的数字:

=SUMPRODUCT(MID(0&A1, LARGE(INDEX(ISNUMBER(--MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1)) * ROW(INDIRECT("1:"&LEN(A1))), 0), ROW(INDIRECT("1:"&LEN(A1))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A1)))/10)´´´
Run Code Online (Sandbox Code Playgroud)

或在第 2 行中:

=SUM(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
Run Code Online (Sandbox Code Playgroud)

但是,我需要以某种方式将它们分开。

注意:我有多达 200 个不同的数字和汽车品牌组合,这会导致简单的替代功能达到其极限。如果可能的话,我更喜欢没有隐藏中间列的基于公式的解决方案(当然没有手动点击鼠标)。我的 VBA 技能很低,但我愿意接受新的挑战!

Sco*_*ner 5

对于 Office 365 或 2019 Excel,我们可以使用 TEXTJOIN 和 FILTERXML。

=TEXTJOIN(",",,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A1,","," ")," ","</s><s>")&"</s></t>","//s[number()=.]"))
Run Code Online (Sandbox Code Playgroud)

FILTERXML 解析一个看起来像 xml 的组合字符串。我们用空格和逗号代替</s><s>然后只返回数字节点。

TEXTJOIN 获取返回的数组并在每个元素之间添加一个逗号。

在此处输入图片说明

没有文本连接,我们可以连接很多:

IFERROR(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,","," "),"  "," ")," ","</s><s>")&"</s></t>","//s[number()=.][1]"),"")
Run Code Online (Sandbox Code Playgroud)

添加[1]到 FILTERXML 的是要返回的节点。所以我们可以把一堆串在一起:

=IFERROR(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,","," "),"  "," ")," ","</s><s>")&"</s></t>","//s[number()=.][1]"),"")&
IFERROR(", "&FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,","," "),"  "," ")," ","</s><s>")&"</s></t>","//s[number()=.][2]"),"")&
IFERROR(", "&FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,","," "),"  "," ")," ","</s><s>")&"</s></t>","//s[number()=.][3]"),"")&
IFERROR(", "&FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,","," "),"  "," ")," ","</s><s>")&"</s></t>","//s[number()=.][4]"),"")&
IFERROR(", "&FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,","," "),"  "," ")," ","</s><s>")&"</s></t>","//s[number()=.][5]"),"")&
IFERROR(", "&FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,","," "),"  "," ")," ","</s><s>")&"</s></t>","//s[number()=.][6]"),"")
Run Code Online (Sandbox Code Playgroud)

如果可能有更多行,则最多可以执行 6 行,将 中的数字更改[#]为下一行。

在此处输入图片说明