2010-12-30 8 views
1

Hintergrund: Ich muss eine CSV-Datei meines Kontoauszugs für die Verwendung in einem Online-Finanzberichterstattungstool bereinigen.Excel VBA: Suchen und Löschen mehrerer Werte aus Strings in einer Spalte

Die Transaktionen sind in den folgenden Formaten (Spalten durch Kommas getrennt):

0901XX 892XXXXX, 24/12/2010, CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010, -29.9 

Das Problem, das ich habe ist, dass die Informationen in der thrid Spalte wegen der Einbeziehung des Transaktionsbetrages alle einzigartig sind und Datum - "ZAHLUNG DER KARTE AN MICKEY MAUS * 29,90 GBP ON 22-12-2010 *". Folglich muss ich alle über 200 Transaktionen einzeln kategorisieren, was meinem psychischen Wohlbefinden nicht förderlich ist.

Die beste Lösung, die ich mir vorstellen kann, besteht darin, alle Zahlen aus dieser Spalte zu entfernen und alle redundanten Begriffe ("GBP ON", ".", "-") mit einem Nullwert zu finden und zu ersetzen. Ich bin mir nicht sicher, wie ich das zusammenstellen soll.

Jede Hilfe würde sehr geschätzt werden.

+0

Es ist mir, oder Sie spezifizieren nicht, was Sie aus der dritten Spalte behalten möchten. –

+0

sind die Daten ursprünglich in einem Excel-Wrokbook, die Sie dann als .csv speichern, um sie auf das Online-Tool hochzuladen? –

+0

Vielleicht können Sie die Analyse Überschrift verwenden.Zum Beispiel haben Sie in E1 "CARD PAYMENT", in C4 haben Sie "CARD PAYMENT TO MICKEY MOUSE", in D4 haben Sie das Geldwert und in E4 haben Sie eine Formel, die nach der Kopfzeile im Text von C4 'sucht = IF (ISERROR (FIND (E $ 1, $ C4,1)), "", $ D4) ' – Fionnuala

Antwort

1

Die folgenden können Ihnen helfen. Ich mache die folgenden Annahmen:

  1. Sie Ihre Online-Bankdaten in einem CSV-Format bekommen zunächst
  2. Ihre dritte Spalte ist immer die Form TextDescription+Amount+Currency+Date
  3. In der CSV-Datei, die dritte Spalte Spalte C in der Arbeitsmappe wird

folgenden Schritte aus:

  1. öffnen CSV-Datei
  2. öffnen VBE-Editor von ALT + F11
  3. Select Insert drücken> Modul aus Symbolleiste
  4. In Modul fügen Sie den folgenden Code, Platz Cursor irgendwo im Code, und dann drücken Sie `F5'

    Sub CleanTransaction() 
    Dim rng As Range, cl As Range 
    Dim lastRow As Long, iChar As Long 
    lastRow = Range("C1").End(xlDown).Row 
    Set rng = Range("C1:C" & lastRow) 
    
    
    For Each cl In rng 
        For iChar = 1 To Len(cl) 
         If IsNumeric((VBA.Mid$(cl, iChar, 1))) Then 
          cl = VBA.Trim$(VBA.Left$(cl, iChar - 1)) 
         End If 
        Next iChar 
    Next cl  
    End Sub 
    

Dies sollte für jedes Element in der Spalte C folgendes tun:

CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010 

... wird ...

CARD PAYMENT TO MICKEY MOUSE 

Beachten Sie, dass der Code funktioniert, indem das erste Vorkommen einer Zahl in der Beschreibung suchen und danach alles Strippen. Dies setzt voraus, dass das erste Auftreten einer Nummer immer den Preis bezeichnet. Wenn der Zahlungsempfänger eine Nummer im Namen hätte, würde der Code z.B. ZAHLUNG DER KARTE AN PHONES4U

+0

Rest, das funktioniert super! Minus der ungerade Geldautomatenentzug, der als "CASH-RÜCKNAHME AN LLOYDS TSB BANK PLC ATM 123 FULHAM BROADWAY LONDON" aufgeführt wird, ist es absolut perfekt. BTW, die Anweisungen, die Sie geschrieben haben, waren sehr klar und nahmen keine Vorkenntnisse an - ein wahrer Experte. Kudos. – Kurt

+1

Anstatt nach der ersten Zahl zu strippen, möchten Sie vielleicht den ersten Dezimalpunkt finden, dann 6 Zeichen sichern und von dort aus nach der ersten Nummer suchen. Könnte eine bessere Chance sein, eine Nummer als eine Periode in der Beschreibung zu haben. Dann sollten Sie Exit For beenden, nachdem Sie die Nummer gefunden haben. –

+0

@Dick - guter Punkt über die Suche nach der ersten Dezimalstelle ... wie die Logik ... –