Excel VBA:1つの列の文字列から複数の値を見つけて削除します
-
14-10-2019 - |
質問
背景:オンライン財務報告ツールで使用するために、銀行声明のCSVファイルをクリーンアップする必要があります。
トランザクションはすべて次の形式です(コンマによって分離された列):
0901XX 892XXXXX, 24/12/2010, CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010, -29.9
私が抱えている問題は、トランザクションの量と日付が含まれているため、スルー列の情報はすべて一意であるということです。「ミッキーマウスへのカード支払い*2010年22日12月22日の29.90 GBP*"。その結果、私は200以上のトランザクションすべてを個別に分類することを余儀なくされていますが、これは私の精神的幸福とは容認されていません。
私が考えることができる最良の解決策は、この列からすべての数値を削除し、すべての冗長な用語( "gbp on"、 "、"、 " - ")をnull値で見つけて置き換えることですが、どのようにしてもわかりませんそれをまとめるために。
どんな助けも大歓迎です。
解決
以下はあなたを助けるかもしれません。私は次の仮定を行っています:
- 最初に.CSV形式でオンラインバンキングの詳細を取得しています
- 3番目の列は常にフォームです
TextDescription+Amount+Currency+Date
- .csvファイルでは、3番目の列はワークブックの列Cです
次の手順を実行します:
- .csvファイルを開きます
- 押してVBEエディターを開きます
ALT + F11
- 選択する 挿入>モジュール ツールバーから
モジュールで次のコードを貼り付けて、カーソルをコードのどこにでも配置してから、「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
これは、列cの各アイテムに対して次のことを行う必要があります。
CARD PAYMENT TO MICKEY MOUSE29.90 GBP ON 22-12-2010
...
CARD PAYMENT TO MICKEY MOUSE
コードは、説明の数の最初の発生を探し、その後すべてを取り除くことで機能することに注意してください。これは、数の最初の発生を前提としています いつも 価格を示します。支払いの受信者が名前に番号を持っていた場合、コードは電話4Uへのカードの支払いなどに失敗します
所属していません StackOverflow