面倒な手作業は不要!エクセルVBAマクロで預金出納帳・カード明細の摘要を自動入力
少し前まで、自分でマクロ作るのが面倒なので、よほどのことがない限りマクロは作ってきませんでした。
でもマクロは書けば書くだけ作るスピードが速くなるので、今は練習のために意識してマクロを書くようにしています。
今回書いたマクロは、預金入出金やカード明細から、摘要を自動入力するVBAマクロです。
預金入出金やカード明細であれば、取引内容から勘定科目・補助科目・摘要のほとんどが決められるので、対応表を準備したうえでマクロを動かします。
この記事の目次
預金出納帳・カード明細の摘要を自動入力するVBAマクロ
最初に、マクロがどう動くかを見てみます。
最初に、預金入出金、または、カード入出金明細を準備します。
今回は、楽天銀行のレイアウトにあわせてテストデータを作りました。
(A列~D列は、楽天銀行からダウンロードしたCSVデータとレイアウトは一緒です。)
ここで、マクロを起動すると、次のように勘定科目・補助科目、摘要が入ります。
マクロの動作の概要
このマクロでは、
あらかじめ作成している「取引内容」と「勘定科目・補助科目・摘要」の対照表を見て、上から順番に、該当するデータがないかを探していきます。
そして、該当する行があった場合には、勘定科目・補助科目、摘要を入力します。
例えば、
預金出納帳やカード明細記載の取引内容が「株式会社村中」であれば、
- 勘定科目:売上高
- 補助科目:(空欄)
- 摘要:村中
が入力されます。
今回のマクロのこだわり
今回のマクロは、あまり深く考えずに作ったのですが、微妙に凝っている部分もあります。
取引内容の照合時にワイルドカードを使用可
取引内容のマッチングにワイルドカードを使用することができます。
ワイルドカードは、countif関数であいまい検索をするときに使うのと全く同じで、次のものが使えます。
記号 | 意味 |
---|---|
* | 任意の複数文字に対応 |
? | 任意の1文字に対応 |
この機能があることで、
元データのD3セルに入っている「NTTヒガシニホン07ガツブン」のような、毎月取引内容が変わる相手先であっても、
という1行だけで対応できます。
実は、今回vlookup関数を使わずに敢えてマクロで実装した理由も、あいまい検索に対応したかったという理由が大きいです。
vlookup関数を使うだけだと、こういう処理はできません。
「取引内容」と「勘定科目・補助科目・摘要」の列が指定可能
銀行やクレジットカード会社によって、入手できるCSVファイルのレイアウトは変わります。
そうすると、取引内容が何列目に来るかも変わってしまいます。
同様に、勘定科目・補助科目・摘要をどの列に出力したいかも変わってくるでしょう。
そのため、何列目の情報を使って、何列目に情報を書き出すかを簡単に変更できるようにしています。
具体的には、
摘要リストシートのA2セル~D2セルに列番号を入れているので、ここを変更することで、入力・出力する列を変更することができます。
例えば、次のように、元データのフォーマットが違う場合でも、摘要リストシートのA2セル~D2セルを変更すると次のようにデータが入力されます。
VBAマクロのソース
今回作ったマクロのソースを貼っておきます。
Sub tekiyounyuuryoku()
Dim oCol(3)
Set iSheet = Worksheets("預金出納帳")
Set mSheet = Worksheets("摘要リスト")
'出力する最初の行、最終行を取得
iRowmin = 2
iRowmax = iSheet.Range("A65536").End(xlUp).row
'マスタの最初の行、最終行を取得
mRowmin = 4
mRowmax = mSheet.Range("A65536").End(xlUp).row
'マスタの全データを配列に取得
mData = mSheet.Range(mSheet.Cells(mRowmin, 1), mSheet.Cells(mRowmax, 4))
'入力、出力列番号を取得
iCol = mSheet.Cells(2, 1)
oCol(0) = mSheet.Cells(2, 2)
oCol(1) = mSheet.Cells(2, 3)
oCol(2) = mSheet.Cells(2, 4)
For iRow = iRowmin To iRowmax
For mRow = 1 To mRowmax - mRowmin + 1
If iSheet.Cells(iRow, iCol) Like mData(mRow, 1) Then
For oC = 0 To 2
iSheet.Cells(iRow, oCol(oC)) = mData(mRow, 2 + oC)
Next
Exit For
End If
Next
Next
End Sub
処理対象となる行とか、シート名は決めうちしてしまっています。
必要に応じて、適宜変更してください。
VBAマクロダウンロード
今回作ったエクセルファイルに興味がある方は、下記リンクよりダウンロードしてください。
摘要自動入力マクロをダウンロードする