面倒な手作業は不要!エクセルVBAマクロで預金出納帳・カード明細の摘要を自動入力


少し前まで、自分でマクロ作るのが面倒なので、よほどのことがない限りマクロは作ってきませんでした。

でもマクロは書けば書くだけ作るスピードが速くなるので、今は練習のために意識してマクロを書くようにしています。

今回書いたマクロは、預金入出金やカード明細から、摘要を自動入力するVBAマクロです。

預金入出金やカード明細であれば、取引内容から勘定科目・補助科目・摘要のほとんどが決められるので、対応表を準備したうえでマクロを動かします。

預金出納帳・カード明細の摘要を自動入力するVBAマクロ

最初に、マクロがどう動くかを見てみます。

最初に、預金入出金、または、カード入出金明細を準備します。

今回は、楽天銀行のレイアウトにあわせてテストデータを作りました。
(A列~D列は、楽天銀行からダウンロードしたCSVデータとレイアウトは一緒です。)

tekiyoujidou_1_1

ここで、マクロを起動すると、次のように勘定科目・補助科目、摘要が入ります。

tekiyoujidou_1_2

マクロの動作の概要

このマクロでは、
あらかじめ作成している「取引内容」と「勘定科目・補助科目・摘要」の対照表を見て、上から順番に、該当するデータがないかを探していきます。

tekiyoujidou_1_3

そして、該当する行があった場合には、勘定科目・補助科目、摘要を入力します。

例えば、
預金出納帳やカード明細記載の取引内容が「株式会社村中」であれば、

  • 勘定科目:売上高
  • 補助科目:(空欄)
  • 摘要:村中

が入力されます。

今回のマクロのこだわり

今回のマクロは、あまり深く考えずに作ったのですが、微妙に凝っている部分もあります。

取引内容の照合時にワイルドカードを使用可

取引内容のマッチングにワイルドカードを使用することができます。

ワイルドカードは、countif関数であいまい検索をするときに使うのと全く同じで、次のものが使えます。

記号 意味
* 任意の複数文字に対応
? 任意の1文字に対応

この機能があることで、
元データのD3セルに入っている「NTTヒガシニホン07ガツブン」のような、毎月取引内容が変わる相手先であっても、

NTTヒガシニホン*

という1行だけで対応できます。

実は、今回vlookup関数を使わずに敢えてマクロで実装した理由も、あいまい検索に対応したかったという理由が大きいです。
vlookup関数を使うだけだと、こういう処理はできません。

「取引内容」と「勘定科目・補助科目・摘要」の列が指定可能

銀行やクレジットカード会社によって、入手できるCSVファイルのレイアウトは変わります。
そうすると、取引内容が何列目に来るかも変わってしまいます。

同様に、勘定科目・補助科目・摘要をどの列に出力したいかも変わってくるでしょう。

そのため、何列目の情報を使って、何列目に情報を書き出すかを簡単に変更できるようにしています。

具体的には、
摘要リストシートのA2セル~D2セルに列番号を入れているので、ここを変更することで、入力・出力する列を変更することができます。

例えば、次のように、元データのフォーマットが違う場合でも、摘要リストシートのA2セル~D2セルを変更すると次のようにデータが入力されます。

tekiyoujidou_1_4

tekiyoujidou_1_5

tekiyoujidou_1_6

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マクロダウンロード

今回作ったエクセルファイルに興味がある方は、下記リンクよりダウンロードしてください。
摘要自動入力マクロをダウンロードする

エクセル基礎講座 「無料」動画マニュアル

「経理事務のためのエクセル基礎講座(初級編)」(動画マニュアル 総収録時間162分)を無料プレゼント中です!

このマニュアルで解説していることを一通り学べば、経理事務を行う上で最低限必要となる知識が得られます。

ご登録者の方には、合わせて、公認会計士が実体験を通して身に付けたエクセルを使う技をメールにてお伝えしていきます!

無料動画講座 登録フォーム

※ご登録頂いたメールアドレスに、エクセルを使いこなすための情報を配信するメールセミナー「エクセル倍速講座」も合わせて配信させていただきます。