Åsa*_*Åsa 2 excel vba data-cleaning
我有一个需要清理的地址列表。
目标是在数字前添加一个空格,如下例所示。
16AVCHARLESDAGAULLECS10525 16 Avcharlesdagaullecs 10525
1BDHIPPOLYTEMARQUES 1 Bdhippolytemarques
20GARRICKSTREET4THFLOOR 20 Garrickstreet 4Thfloor
2109ZAC 2109 Zac
2-4VANDRIESSTREET4 2-4 Vandriesstreet 4
5:ETVÄRG.19.E 5:Etvärg. 19.E
901ACEHIGHENTTOWE9TH233 901 Acehighenttowe 9Th 233
Run Code Online (Sandbox Code Playgroud)
我找到了一个在字母之间放置空格的脚本,但这不是我的目标。这是我到目前为止的代码。它没有给出结果。
Function Add_Spaces(ByVal sText As String) As String
Dim CharNum As Long
Dim FixedText As String
Dim CharCode As Long
FixedText = Left(sText, 1)
For CharNum = 2 To Len(sText)
CharCode = Asc(Mid(sText, CharNum, 1))
If CharCode >= 65 And CharCode <= 90 Then
FixedText = FixedText & " " & Mid(sText, CharNum, 1) 'This needs to be rewritten
Else
FixedText = FixedText & Mid(sText, CharNum, 1)
End If
Next CharNum
Add_Spaces = FixedText
End Function
Run Code Online (Sandbox Code Playgroud)
你对我如何解决这个问题有任何想法吗?
这是正则表达式的一个解决方案,可能会给出一个线索:R 将字符串中的单词与数字分开
这似乎适用于您的所有示例:
正则表达式根据从数字到字母的变化进行拆分,反之亦然,并且还对TH和.
这些异常可能会导致其他数据出现问题,但似乎适用于您提供的内容。你的可变性是否会成为一个问题是未知的。
请注意,我对 Regex 使用了早期绑定(工具/参考集以包含 Microsoft VBScript 正则表达式 5.5),但如果您要分发此代码,则可以将其更改为后期绑定。
编辑: 请注意,我没有将其转换为正确的大小写,但如果确实需要,可以这样做
`Set Reference to Microsoft VBScript Regular Expressions 5.5
Option Explicit
Function replacer(s As String) As String
Dim RE As RegExp
Const sPat As String = "(\dTH|\d)(?!TH)(?=[A-Z])|([A-Z.])(?=\d)"
Const sRepl As String = "$1$2 "
Dim sTemp As String
Set RE = New RegExp
With RE
.Global = True
.Pattern = sPat
.IgnoreCase = True
replacer = .Replace(s, sRepl)
End With
End Function
Run Code Online (Sandbox Code Playgroud)
公式将是,例如:
A2: =replacer(A2)
Run Code Online (Sandbox Code Playgroud)
如果PROPER需要大小写,则将公式更改为:
A2: =PROPER(replacer(A2))
Run Code Online (Sandbox Code Playgroud)
在美国,这似乎比 VBAStrConv函数对您的数据更有效。
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |