寻找一种根据单元格中的最后五个数字拆分 excel 中的单元格的方法
Looking for a way to split cells in excel based the last five numbers in a cell
我正在寻找一种方法来修复表示 Excel 中地址的混合数据集。
这是一个示例数据集。
Kirchgasse 2389179 Beimerstetten
所有这些应该会产生三个数据集。
A1 = Kirchgasse 2389179 Beimerstetten
A2 = Kirchgasse 23
A3 = 89179
A4 = Beimerstetten
模式是,A3 始终是数据集中的最后 5 个数字。
我完全迷失在这里,因为 Excel 通常不是我选择的武器。
将 Kirchgasse 2389179 Beimerstetten
放入 A1
单元格,并使用下面的 VBA 代码将 D1
单元格的值设置为最后 5 个数字
Sub Test_Pattern()
Dim stringOne As String
Dim regexOne As Object
Set regexOne = New RegExp
regexOne.Pattern = "(\d{5})(?!.*\d)"
regexOne.Global = TRUE
regexOne.IgnoreCase = IgnoreCase
stringOne = Range("A1").Value
Set theMatches = regexOne.Execute(stringOne)
For Each Match In theMatches
Range("D1").Value = Match.Value
Next
End Sub
要了解如何在 VBA 中使用正则表达式,请参阅此 ref
在A2
中,公式复制下来:
=TRIM(SUBSTITUTE(MID(SUBSTITUTE(" "&REPLACE(REPLACE(A,AGGREGATE(14,6,FIND(ROW(:)-1,A,COLUMN(A:Z)),1)-4,0," "),FIND(" ",A),1,"@")," ",REPT(" ",50)),ROW($A1)*50,50),"@"," "))
你也可以使用Excel公式来拆分单元格,Excel给了我们充分的机会使用这些功能,有很多方法对于要解决的查询,您可以按照以下任何一种方法来完成所需的输出
从单元格 A1 中提取第一部分,公式在单元格 A2 中使用
=LEFT($A1,FIND(" ",$A1)+2)
要从单元格 A1 中提取第二部分,单元格 A3 中使用的公式
=LEFT(REPLACE($A1,1,LEN($A2),""),5)
从单元格 A1 中提取字符串的最后一部分,公式在单元格 A4 中使用
=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",100)),100))
但是要提取 5 个数字,您也可以使用以下任何一种适合您的 Excel 版本
单元格 A11 中显示的公式
=MAX(IFERROR(MID($A,ROW(INDIRECT("1:"&LEN($A))),5)*1,""))
单元格 A13 中显示的公式
=LARGE(IFERROR(--MID($A1,SEQUENCE(LEN($A1)),COLUMN($A:$E)),0),1)
单元格 A15 中显示的公式
=AGGREGATE(14,6,IFERROR(--MID($A1,ROW(:000),COLUMN($A:$E)),0),1)
单元格 A17 中显示的公式
=--RIGHT(FILTERXML("<p><w>"&SUBSTITUTE($A1," ","</w><w>")&"</w></p>","//w[.*0=0]"),5)
要了解FILTERXML
函数的详细知识,您可以参考下面的link,由JvdV Sir
编写
还有几种方法
单元格 A2 中使用的公式
=SUBSTITUTE(TRIM(FILTERXML("<p><w>"&SUBSTITUTE(SUBSTITUTE(LEFT($A1,FIND(" ",$A1)+2)&REPLACE($A1,1,FIND(" ",$A1)+2," ")," ","@",1)," ","</w><w>")&"</w></p>","//w")),"@"," ")
只要在A2单元格输入公式,如果你用的是O365或者Excel2021
就会溢出
如果你没有使用上面的 Excel 版本那么你可以试试这个并填写公式
单元格 B2 中使用的公式并向下填充
=SUBSTITUTE(TRIM(FILTERXML("<p><w>"&SUBSTITUTE(SUBSTITUTE(LEFT($A,FIND(" ",$A)+2)&REPLACE($A,1,FIND(" ",$A)+2," ")," ","@",1)," ","</w><w>")&"</w></p>","//w["&ROW(A1)&"]")),"@"," ")
我正在寻找一种方法来修复表示 Excel 中地址的混合数据集。
这是一个示例数据集。
Kirchgasse 2389179 Beimerstetten
所有这些应该会产生三个数据集。
A1 = Kirchgasse 2389179 Beimerstetten
A2 = Kirchgasse 23
A3 = 89179
A4 = Beimerstetten
模式是,A3 始终是数据集中的最后 5 个数字。
我完全迷失在这里,因为 Excel 通常不是我选择的武器。
将 Kirchgasse 2389179 Beimerstetten
放入 A1
单元格,并使用下面的 VBA 代码将 D1
单元格的值设置为最后 5 个数字
Sub Test_Pattern()
Dim stringOne As String
Dim regexOne As Object
Set regexOne = New RegExp
regexOne.Pattern = "(\d{5})(?!.*\d)"
regexOne.Global = TRUE
regexOne.IgnoreCase = IgnoreCase
stringOne = Range("A1").Value
Set theMatches = regexOne.Execute(stringOne)
For Each Match In theMatches
Range("D1").Value = Match.Value
Next
End Sub
要了解如何在 VBA 中使用正则表达式,请参阅此 ref
在A2
中,公式复制下来:
=TRIM(SUBSTITUTE(MID(SUBSTITUTE(" "&REPLACE(REPLACE(A,AGGREGATE(14,6,FIND(ROW(:)-1,A,COLUMN(A:Z)),1)-4,0," "),FIND(" ",A),1,"@")," ",REPT(" ",50)),ROW($A1)*50,50),"@"," "))
你也可以使用Excel公式来拆分单元格,Excel给了我们充分的机会使用这些功能,有很多方法对于要解决的查询,您可以按照以下任何一种方法来完成所需的输出
从单元格 A1 中提取第一部分,公式在单元格 A2 中使用
=LEFT($A1,FIND(" ",$A1)+2)
要从单元格 A1 中提取第二部分,单元格 A3 中使用的公式
=LEFT(REPLACE($A1,1,LEN($A2),""),5)
从单元格 A1 中提取字符串的最后一部分,公式在单元格 A4 中使用
=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",100)),100))
但是要提取 5 个数字,您也可以使用以下任何一种适合您的 Excel 版本
单元格 A11 中显示的公式
=MAX(IFERROR(MID($A,ROW(INDIRECT("1:"&LEN($A))),5)*1,""))
单元格 A13 中显示的公式
=LARGE(IFERROR(--MID($A1,SEQUENCE(LEN($A1)),COLUMN($A:$E)),0),1)
单元格 A15 中显示的公式
=AGGREGATE(14,6,IFERROR(--MID($A1,ROW(:000),COLUMN($A:$E)),0),1)
单元格 A17 中显示的公式
=--RIGHT(FILTERXML("<p><w>"&SUBSTITUTE($A1," ","</w><w>")&"</w></p>","//w[.*0=0]"),5)
要了解FILTERXML
函数的详细知识,您可以参考下面的link,由JvdV Sir
还有几种方法
单元格 A2 中使用的公式
=SUBSTITUTE(TRIM(FILTERXML("<p><w>"&SUBSTITUTE(SUBSTITUTE(LEFT($A1,FIND(" ",$A1)+2)&REPLACE($A1,1,FIND(" ",$A1)+2," ")," ","@",1)," ","</w><w>")&"</w></p>","//w")),"@"," ")
只要在A2单元格输入公式,如果你用的是O365或者Excel2021
就会溢出如果你没有使用上面的 Excel 版本那么你可以试试这个并填写公式
单元格 B2 中使用的公式并向下填充
=SUBSTITUTE(TRIM(FILTERXML("<p><w>"&SUBSTITUTE(SUBSTITUTE(LEFT($A,FIND(" ",$A)+2)&REPLACE($A,1,FIND(" ",$A)+2," ")," ","@",1)," ","</w><w>")&"</w></p>","//w["&ROW(A1)&"]")),"@"," ")