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 技能很低,但我愿意接受新的挑战!
对于 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 行,将 中的数字更改[#]
为下一行。
归档时间: |
|
查看次数: |
126 次 |
最近记录: |