2017-02-09 198 views
2

我目前正在做一些有關數據看起來像這樣的城市地址的非常大的數據源的工作。操縱字符串以提取地址

137是正確的地址,但它屬於建築物,在街上佔用135-138A。

源:

137 9/F 135-138A KING STREET 135-138A KING STREET TOR

我已經使用了function其除去上extendoffice所示的重複。

第二列成了這樣:

137 9/F 135-138A景街TOR

什麼,我想現在要做的就是

  • 找到地址數量,將其添加在街道名稱前
  • 刪除連接到短劃線的數字 - ):

9/F 137景街TOR

請問最好的方式做到這一點?

我遇到的主要問題是地址名稱中有許多不一致的空格。 「van dyke rd」。

反正是有,我可以在陣列中的定位「 - 」,並設置爲2號變量在儀表的兩側,並與位於前

Function RemoveDupes2(txt As String, Optional delim As String = " ") As String 
Dim x 

With CreateObject("Scripting.Dictionary") 
    .CompareMode = vbTextCompare 
    For Each x In Split(txt, delim) 
     If Trim(x) <> "" And Not .exists(Trim(x)) Then .Add Trim(x), Nothing 
    Next 
    If .Count > 0 Then RemoveDupes2 = Join(.keys, delim) 
End With 
End Function 
正確的地址號替換

謝謝

回答

1

正則表達式是一種(除其他之外)在字符串中搜索特徵的方法。

看起來你正在尋找的特點是:number:maybe some spaces : dash : maybe some spaces : number

在正則表達式的符號,這將表示爲: ([0-9]*)[ ]*-[ ]*([0-9]*) 翻譯爲:查找後跟零個或多個空格的數字順序組,然後一個破折號,然後零或多個空格,然後更多的數字。

圓括號表示將返回的元素。因此,您可以將變量分配給第一個數字或第二個數字。

如果在地址的其他地方可能會出現短劃線,則可能需要對其進行調整。

在實際執行進一步信息,請訪問:How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops

+0

感謝您的建議,我很新的編程,所以我今天學到了一些新東西 – bathtubandatoaster

1

這符合您需要的情況下,它抓住了地址範圍作爲兩個單獨的比賽(如果你想進一步處理)。

目前的代碼簡單地完全刪除了這個範圍。

有什麼邏輯可以將9/F放在前面?

regex here

Function StripString(strIn As String) As String 
Dim objRegex As Object 
Set objRegex = CreateObject("vbscript.regexp") 
With objRegex 
     .Pattern = "(\d+[A-C]?)-(\d+[A-C]?)" 
     If .test(strIn) Then 
      StripString = .Replace(strIn, vbullstring) 
     Else 
      StripString = "No match" 
     End If 
    End With 
End Function 
+0

嘿謝謝你的幫助,我已經能夠將它與我的其他功能結合起來,讓9樓到前面。 只有一個問題什麼是vbullstring? – bathtubandatoaster

+0

@bathtubandatoaster用「」替換匹配的正則表達式。它是建在恆定,所以比使用「」更有效率「 – brettdj

+0

非常感謝這麼多:D – bathtubandatoaster

0

,我正:

  • 交換第1和第2子

  • 擦除與子 「 - 」 它

    Function RemoveDupes2(txt As String, Optional delim As String = " ") As String 
        Dim x As Variant, arr As Variant, temp As Variant 
        Dim iArr As Long 
    
        With CreateObject("Scripting.Dictionary") 
         .CompareMode = vbTextCompare 
         For Each x In Split(txt, delim) 
          If Trim(x) <> "" And Not .exists(Trim(x)) Then .Add Trim(x), Nothing 
         Next 
         If .count > 0 Then 
          arr = .keys 
          temp = arr(0) 
          arr(0) = arr(1) 
          arr(1) = temp 
          For iArr = LBound(arr) To UBound(arr) 
           If InStr(arr(iArr), "-") <> 0 Then arr(iArr) = "" 
          Next 
          RemoveDupes2 = Join(arr, delim) 
         End If 
        End With 
    End Function