如何确定街道名称或城市是否需要空间?

问题:我希望能够确定街道名称或城市名称中是否需要空间。

原因在于用户习惯于将两个单词合并成一个单词。

防爆。 在数据库中,“贝尔花园”作为“贝尔加登”input。

他们的方式来确定何时用户做到这一点,并相应地添加空间?

您可以使用正则expression式, 这是一个正则expression式validationtesting。

并在下面的解释如何做到这一点。

代码和正则expression式进行了更新,到最后检查它们。

在Excel上启用正则expression式

  1. 打开Excel工作簿。
  2. Alt + F11打开VBA /macros窗口。
  3. 工具然后引用添加引用正则expression式
    ![Excel VBA表单添加引用
  4. 并selectMicrosoft VBScript正则expression式5.5
    ![Excel VBA添加正则表达式参考
  5. 插入一个新的模块(代码需要驻留在模块中,否则不能工作)。
    ![Excel VBA插入代码模块
  6. 在新插入的模块中,
    ![Excel VBA插入代码到模块中

  1. 添加下面的代码:

    Sub test_regex() Dim str As String Dim objMatches As Object Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(1) Dim i As Long lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'To check the name For i = 1 To lastrow str = Trim(CStr(Cells(i, 1))) Set objRegExp = CreateObject("VBScript.RegExp") 'New regexp objRegExp.Pattern = "^(?![ ])(?!.*[ ]{1})(?:([AZ][az]+\s*?)([Mc|O']*[AZ][az]+\s*?)*(?!.*[ ])$)+$" objRegExp.Global = True Set objMatches = objRegExp.Execute(str) If objMatches.Count <> 0 Then ws.Cells(i, 2) = objRegExp.Replace(str, "$1" & " " & "$2") ws.Cells(i, 2).Interior.ColorIndex = 4 Else ws.Cells(i, 2).Interior.ColorIndex = 3 ws.Cells(i, 2) = ws.Cells(i, 1) End If Next i End Sub 

结果

![结果

此代码将Trim名称并根据正则expression式添加空格。 只有2个大写字母的名字,除了Mc和O'

如果名字像ThIsNaMe ,输出将是Th Me

红色名称的代码颜色已经是正确的,绿色的代码有一些间距问题。

Ps:因为我是Regex新手,有优化空间。

更新编辑:

对于更复杂的正则expression式和超过2个大写字母的情况和数字,这里是正则expression式更新

颜色索引是Swapped,所以当颜色是红色时,意味着它被改变了。 因此,用户可以直观地validation这些变化。

 Sub test_regex() Dim str As String, final_str As String Dim objMatches As Object Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(1) Dim i As Long, k As Long, lastrow As Long lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'To check the name For i = 1 To lastrow str = Trim(CStr(Cells(i, 1))) Set objRegExp = CreateObject("VBScript.RegExp") 'New regexp objRegExp.Pattern = "(?!.*[ ]{1})(?:(?:[Mc|O']*[AZ]{1}[az]+)|(?:[\d]+[rd|th|st|nd]*))" objRegExp.Global = True Set objMatches = objRegExp.Execute(str) If objMatches.Count > 1 Then final_str = "" For Each m In objMatches final_str = final_str & " " & CStr(m.Value) Next ws.Cells(i, 2).Interior.ColorIndex = 3 ws.Cells(i, 2) = Trim(final_str) Else ws.Cells(i, 2).Interior.ColorIndex = 4 ws.Cells(i, 2) = ws.Cells(i, 1) End If Next i End Sub 

结果

![![![结果2

你不能这样做,你需要某种模式来实现自动化,但在你的情况下,不可能通过使用街道名称或城市名称来自动化“空间”。