2016-05-27 10 views
-2

Ich suche Hilfe zu den unten 2 Instanzen in Macro & auch als Formel. Sind die Zahlen zu extrahieren einschließlich derZahlen aus String extrahieren - Makro/Excel

situation1 das Komma: Zelle A1 hat

C160516XXX 164614722,65

Denken, wenn wir die Zahl durch das Lesen von rechts extrahieren und bis ein Buchstabe/Zeichen erscheint

Situation2:

Zelle B1 hat

1605080506C 91244,22 FDEC20160413000488 // 4261997/XXXX/XXXXXXX/XXX/US98268242

Ist es möglich, die Zahlen versteckt zwischen dem ersten und dem zweiten Brief zu extrahieren /Charakter?

+0

Dies wurde unzählige Male hier auf SO gefragt, oder Sie können Google-Suchergebnis wollen. – findwindow

Antwort

0

Sie haben die richtige Idee. Für Situation 1 führen Sie eine Schleife zurück, bis Sie auf ein nicht numerisches Zeichen stoßen. Verwenden Sie IsNumeric(Mid(str, index, 1)), um eine 1-stellige Zeichenfolge abzurufen und zu testen, ob es sich um eine numerische Zeichenfolge handelt. Speichern Sie dann die Anzahl der Iterationen n bis Wert gefunden wurde. Verwenden Sie Right(str, n), um die Teilzeichenfolge der letzten n Zeichen der Zeichenfolge abzurufen.

Für Situation 2, Schleife vorwärts, Speichern der Indizes der ersten und zweiten nicht numerischen Zeichen, x1 und x2. Verwenden Sie dann Mid(str, x1+1, x2-x1-1), um die Teilzeichenfolge zwischen Ihrem ersten und zweiten nicht numerischen Zeichen abzurufen. Hier

ist ein Beispiel VBA-Implementierung, die Ihre Antworten in C1 und D1 gesetzt wird:

Sub getSubstrings() 
    Dim str1 As String 
    Dim str2 As String 
    Dim char As String 
    Dim n As Integer 
    Dim x1 As Integer 
    Dim x2 As Integer 

    str1 = Cells(1, 1).Value 'A1 
    str2 = Cells(1, 2).Value 'B1 

    'Situation 1 
    For i = Len(str1) To 1 Step -1 
     char = Mid(str1, i, 1) 
     If Not IsNumeric(char) And char <> "," Then 
      n = i 
      Exit For 
     End If 
    Next 
    Cells(1, 3).Value = Right(str1, Len(str1) - n) 'write answer to C1 

    'Situation 2 
    x1 = 0 
    x2 = 0 
    For i = 1 To Len(str2) 
     char = Mid(str2, i, 1) 
     If Not IsNumeric(char) And char <> "," Then 
      If x1 = 0 Then 
       x1 = i 'set first index 
      Else 
       x2 = i 'set second 
       Exit For 
      End If 
     End If 
    Next 
    Cells(1, 4).Value = Mid(str2, x1 + 1, x2 - x1 - 1) 
End Sub 

FYI die meisten Menschen auf SO nicht geben Sie eine vollständige Code-Implementierung, aber ich hatte nichts Besseres zu tun. Es gibt wahrscheinlich auch eine Excel-Befehlslösung, die aber normalerweise keine "Zeichenklassen" behandelt (nicht numerisch, aber nicht komma). Ich schlage vor, diesen Code als Vorlage zu verwenden, um über zukünftige VBA-Lösungen nachzudenken. Ich zeige Ihnen hier, wie Sie auf Zellen zugreifen, Daten durchlaufen und bedingte Anweisungen schreiben. Bitte recherchiere auch online, um dich vertrauter zu machen.

+0

danke für deine Antwort, ich bin kein Experte in Codierung .. ist es möglich für Sie zu helfen –

+0

Sicher, haben Sie noch nichts probiert? Willkommen bei StackOverflow BTW!SO ist kein Code-für-mich-Service; Vielmehr ermutigt es Sie, selbst zu recherchieren und hilft Ihnen, wenn Sie nicht weiterkommen. Wenn Sie noch nicht in VBA codiert haben, würde ich empfehlen, online nach einem Tutorial zu suchen, das Ihnen den Einstieg erleichtert. –

+0

= MID (C2, FINDEN ("C", C2) +1, FINDEN (",", C2) - FINDEN ("C", C2) +2) @Sean Scott Ich habe das unten für Situation 2 versucht Allerdings habe ich festgestellt, dass einige meiner Daten nicht Kommas und ein paar Variationen haben. Ich untersuche FIND- und OR-Funktionen. C45227,49DIV D45227,49FV –

0

Für

C160516XXX 164614722,65

können Sie Excel-Formeln verwenden, zum Beispiel MID() und SEARCH() können kombiniert werden Sie folgendes Ergebnis zu geben.

164614722,65

diese setzen, wo Sie =MID(A1,SEARCH("xxx",A1,1)+3,SEARCH("xxx",A1,1)+100)