【发布时间】:2021-06-05 21:23:26
【问题描述】:
我无法提取给定地址单元格的邮政编码,如下所示:
“108, avenue du Grand Sud 37 170 CHAMBRAY les TOURS”。
我用过:
=RECHERCHE(9^9;--("0"&STXT(A2;MIN(CHERCHE({0.1.2.3.4.5.6.7.8.9};A2&"0 123456789"));LIGNE($1:$100))))
这有时有效,有时与地址开头的街道编号无关(此处为“108”)。
问题在于模式“37 170”的空间。我想删除模式中的空白。有没有一种正则表达式方法来搜索这个模式“## ###”,然后删除这个有毒的空格?
谢谢你的诡计。
我试过这段代码:
Function toto(r, Optional u = 0)
Application.Volatile
Dim i%, j%, adr$, cp$, loca$, x
x = Split(r)
For i = 0 To UBound(x)
If x(i) Like "#####" Then Exit For
Next
If i > UBound(x) Then
adr = r.Value 'facultatif
Else
cp = x(i)
For j = 0 To i - 1: adr = adr & x(j) & " ": Next
adr = Left$(adr, Len(adr) + (Len(adr) > 1))
For j = i + 1 To UBound(x): loca = loca & x(j) & " ": Next
loca = Left$(loca, Len(loca) + (Len(loca) > 1))
End If
x = Array(adr, cp, loca)
If 0 < u And u < 4 Then toto = x(u - 1) Else toto = x
End Function
上面的代码适用于拆分地址,包括街道号码、邮政编码和城市名称。但当邮政编码为## ### = 2 位整数 - 空格 - 3 位整数时,它不起作用。
编辑: 2021 年 6 月 1 日
由于我的问题似乎不够清楚,让我们改写一下:
给定一个 Excel 工作表,其中包含 A 列的每个单元格,从 A1 到 A10000,完成这样的地址:
“2 rue Rene cassin Centre Commercial Châlon 2 Sud 71 100 CHALON SUR SAONE” 或者这个: "15, Rue Emile Schwoerer 68 000 COLMAR"
其中“71 100”和“68 000”是格式不正确的邮政编码,因为前 2 个数字和最后 3 个数字之间有多余的空格。
我需要拆分Ai单元格内容才能获得:
- 在单元格 Bi 中:文本(街道等)位于“错误”邮政编码的前 2 个数字之前的左侧,
- 在单元格 Ci 中:具有正确格式的邮政编码(“71100”而不是“71 100”),
- 在单元格 Di 中:邮政编码后的文本(城市名称)。
是一种围绕邮政编码的左右提取。
上面我贴的代码不起作用。
为了获得正确的邮政编码格式,我尝试了正则表达式以下功能:
Function FindReplaceRegex(rng As Range, reg_exp As String, replace As String)
Set myRegExp = New RegExp
myRegExp.IgnoreCase = False
myRegExp.Global = True
myRegExp.Pattern = reg_exp
FindReplaceRegex = myRegExp.replace(rng.Value, replace)
End Function
但我无法确定正确的正则表达式模式以消除邮政编码中的空格。 PEH 给了我以下模式:
(.*)([0-9]{2} ?[0-9]{3})(.*)
在使用该功能时,我尝试通过以下方式定义替换模式:
(.*)([0-9]{2}[0-9]{3})(.*)
但这行不通。希望这能澄清我的问题。
欢迎任何想法。谢谢
【问题讨论】:
-
这只是 VBA 或 Excel 工作簿格式吗?
标签: excel vba excel-formula