Excel VBA: Trouver et supprimer les valeurs multiples à partir de chaînes dans une colonne

StackOverflow https://stackoverflow.com/questions/4564560

Question

Arrière-plan. Je dois nettoyer un fichier CSV de mon relevé bancaire pour une utilisation dans un outil de reporting financier en ligne

Les opérations sont dans les formats suivants (colonnes séparés par des virgules):

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

Le problème que j'ai est que les informations contenues dans la colonne thrid est tout unique en raison de l'inclusion du montant de la transaction et la date - « PAIEMENT PAR CARTE DE MICKEY MOUSE * 29,90 GBP 22-12-2010 * ». Par conséquent, je suis obligé de classer toutes les transactions individuellement 200+, ce qui est de mon bien-être propice mentale.

La meilleure solution que je peux penser est de supprimer tous les numéros de cette colonne et rechercher et remplacer toutes les conditions redondantes ( « GBP », « » « - ») avec une valeur nulle, mais je suis pas sûr de savoir comment s'y prendre pour mettre cela ensemble.

Toute aide serait grandement appréciée.

Était-ce utile?

La solution

Ce qui suit peut vous aider. Je fais les hypothèses suivantes:

  1. Vous obtenez vos coordonnées bancaires en ligne dans un format .csv initialement
  2. Votre troisième colonne est toujours de la forme TextDescription+Amount+Currency+Date
  3. Dans le fichier Csv, la troisième colonne est la colonne C dans le classeur

Procédez comme suit:

  1. fichier Open
  2. Ouvrir l'éditeur VBE en appuyant sur ALT + F11
  3. Sélectionnez Insérer> Module de la barre d'outils
  4. Dans le module collez le code suivant, placez le curseur n'importe où dans le code, puis appuyez sur 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
    

Cela devrait faire ce qui suit pour chaque élément dans la colonne C:

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

... devient ...

CARD PAYMENT TO MICKEY MOUSE

Notez que les œuvres de code en recherchant la première occurence d'un numéro dans la description et le décapage à tout ce qui suit. Cela suppose que la première apparition d'un certain nombre toujours désigne le prix. Si le bénéficiaire du paiement avait un numéro dans le nom, puis le code échouerait par exemple PAIEMENT DE CARTE À Phones4u

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top