2016-04-26 4 views
-1

Ich habe eine Reihe von Adressen, aus denen ich Postleitzahlen extrahieren muss. Die Daten sind sehr schlampig formatiert (nicht getrennt, einige mit Abständen einige ohne etc ..) bedeutet, dass die einzige Möglichkeit, die Postleitzahlen zu extrahieren, zu erstellen ist eine Spalte, zu der nur die Werte hinzugefügt werden, die Text und eine Nummer enthalten, da dies die einzigen Zellen sind, die die Postleitzahl enthalten.Wie extrahiert man nur Zellen, die einen Buchstaben UND eine Zahl in Excel enthalten?

enter image description here

Die Daten sind zu chaotisch, wo genau die Postleitzahl Lügen zu isolieren, aber ich möchte etwas, ein Ergebnis wie oben zurückzukehren.

Wie könnte ich nur Zelle O2 & P2 aus dem Bereich K2: R2 zurückgeben?

* Adresse hier ist aus

+0

Ist es immer 2-Zellen, die die Postleitzahl haben? Können Sie das neueste Excel in Office 365 verwenden? Wenn nicht zu beiden dann VBA ist der Weg zu gehen. –

+0

Nein, einige kamen zusammen, manche nicht. Ich weiß jedoch nicht, welche Logik zu wählen ist. Handelt es sich um eine Rückgabezelle, die 1 OR 2 ODER 3, und A oder B oder C. usw. enthält? Ich bin hier weit von meiner Tiefe entfernt! – MyFamily

Antwort

1

Obwohl ich glaube, dass @ DarrenBartrup-Cook eine bessere Antwort hat. Diese schnelle, schmutzige kleine UDF wird es tun, basiert auf der Mischung von Zahlen und Text wie gefragt.

Function pcode(rng As Range) 
Dim rngt As Range 
Dim chr As String 
Dim i As Integer 

For Each rngt In rng 
    If Not IsNumeric(rngt) Then 
     For i = 1 To Len(rngt) 
      If IsNumeric(Mid(rngt, i, 1)) Then 
       pcode = Trim(pcode & " " & rngt.Value) 
       Exit For 
      End If 
     Next i 
    End If 
Next rngt 
End Function 

Setzen Sie dieses in einem Modul an der Arbeitsmappe angebracht, NICHT das Arbeitsblatt-Code oder Code Thisworkbook.

Sie würden es aus dem Blatt mit dieser Formel bezeichnen:

=pcode(I5:P5) 

enter image description here

+0

Genie! Es funktioniert für etwa 95% meiner Aufzeichnungen, aber ich habe ein paar Fehler, dies liegt an den pissarmen Daten, die ich habe, nicht deine Antwort auf meine Frage! – MyFamily

1

Für eine VBA führen Sie den Code unten verwenden könnte.
In Zelle T2 =GetPostCode(K2:R2),
oder in VBA eingeben können Sie Debug.Print GetPostCode(Sheet1.Range("K2:N2"))

Ich erinnere mich nicht verwenden kann, wo ich das Muster von bekam, aber wahrscheinlich verbessert werden kann.

Public Function GetPostCode(AddressRange As Range) As Variant 

    Dim rCell As Range 
    Dim sAddressString As String 

    For Each rCell In AddressRange 
     sAddressString = sAddressString & " " & rCell.Value 
    Next rCell 
    sAddressString = Trim(sAddressString) 

    GetPostCode = ValidatePostCode(sAddressString) 

End Function 

Public Function ValidatePostCode(strData As String) As Variant 

    Dim RE As Object, REMatches As Object 

    Dim UKPostCode As String 

    'Pattern could probably be improved. 
    UKPostCode = "(?:(?:A[BL]|B[ABDHLNRST]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[CHNX]?|F[KY]|G[LUY]?|" _ 
       & "H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTWY]?|" _ 
       & "T[ADFNQRSW]|UB|W[ACDFNRSV]?|YO|ZE)\d(?:\d|[A-Z])? \d[A-Z]{2})" 

    Set RE = CreateObject("VBScript.RegExp") 
    With RE 
     .MultiLine = False 
     .Global = False 
     .IgnoreCase = True 
     .Pattern = UKPostCode 
    End With 

    Set REMatches = RE.Execute(strData) 
    If REMatches.Count = 0 Then 
     ValidatePostCode = CVErr(xlErrValue) 
    Else 
     ValidatePostCode = REMatches(0) 
    End If 

End Function 

Edit: Ich dachte, es funktioniert nicht, da es nur E17 3RU zurück, die in Walthamstow, aber HE17 3RU ist keine gültige Postleitzahl (http://www.royalmail.com/find-a-postcode), so fand es die gültigen.

+0

Sorry ja, ich habe alle Details der Adresse geändert - will nicht in Schwierigkeiten geraten! Ich werde die Frage bearbeiten – MyFamily

+0

Ja, definitiv keine echten Daten verwenden. :) –

Verwandte Themen