入金消込とは、売掛金(請求済みの未回収金)と実際の入金データを照合し、一致した取引を「消し込む」(処理済みにする)作業です。取引件数が多いと目視確認に時間がかかり、ミスも起きやすくなります。この記事では、VBAを使って入金消込を自動化する方法を解説します。
入金消込をマクロで自動化するには?
入金消込をVBAで自動化するには、主に次の2つのシートを用意します。
- 請求管理シート:取引先名・請求金額・入金期限・入金状況などを管理する
- 入金データシート:入金日・入金元・入金金額を記録する
マクロでは「入金データシートの金額」と「請求管理シートの請求金額」を照合し、一致したものに「入金済み」のフラグを立てる処理を行います。
未入金リストを自動抽出するには?
まずはシンプルに、請求管理シートから「入金状況が空欄(未処理)」の行を別シートに書き出すマクロです。
Sub ExtractUnpaid()
Dim wsData As Worksheet
Dim wsResult As Worksheet
Dim lastRow As Long
Dim resultRow As Long
Dim i As Long
Set wsData = ThisWorkbook.Worksheets("請求管理")
Set wsResult = ThisWorkbook.Worksheets("未入金リスト")
' 未入金リストシートを初期化
wsResult.Rows("2:" & wsResult.Rows.Count).ClearContents
lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row
resultRow = 2
For i = 2 To lastRow
' D列「入金状況」が空欄なら未入金として転記
If wsData.Cells(i, 4).Value = "" Then
wsResult.Cells(resultRow, 1).Value = wsData.Cells(i, 1).Value ' 取引先名
wsResult.Cells(resultRow, 2).Value = wsData.Cells(i, 2).Value ' 請求金額
wsResult.Cells(resultRow, 3).Value = wsData.Cells(i, 3).Value ' 入金期限
resultRow = resultRow + 1
End If
Next i
MsgBox "未入金リストを更新しました。件数:" & (resultRow - 2) & "件"
End Sub
このマクロを実行するたびに未入金リストが最新の状態に更新されます。
入金データと請求データを自動照合するには?
次に、入金データシートの金額と取引先名を請求管理シートと照合し、一致した場合に「入金済み」を自動入力するマクロです。
Sub MatchPayment()
Dim wsInvoice As Worksheet ' 請求管理シート
Dim wsPayment As Worksheet ' 入金データシート
Dim invoiceLastRow As Long
Dim paymentLastRow As Long
Dim i As Long, j As Long
Set wsInvoice = ThisWorkbook.Worksheets("請求管理")
Set wsPayment = ThisWorkbook.Worksheets("入金データ")
invoiceLastRow = wsInvoice.Cells(wsInvoice.Rows.Count, 1).End(xlUp).Row
paymentLastRow = wsPayment.Cells(wsPayment.Rows.Count, 1).End(xlUp).Row
For i = 2 To invoiceLastRow
' すでに入金済みの行はスキップ
If wsInvoice.Cells(i, 4).Value = "入金済み" Then GoTo NextInvoice
For j = 2 To paymentLastRow
' 取引先名と金額が一致する場合に入金済みを入力
If wsInvoice.Cells(i, 1).Value = wsPayment.Cells(j, 2).Value And _
wsInvoice.Cells(i, 2).Value = wsPayment.Cells(j, 3).Value Then
wsInvoice.Cells(i, 4).Value = "入金済み"
wsInvoice.Cells(i, 5).Value = wsPayment.Cells(j, 1).Value ' 入金日
Exit For
End If
Next j
NextInvoice:
Next i
MsgBox "照合が完了しました。"
End Sub
未入金に色を付けて目立たせるには?
未入金の行に自動で色を付けて視認性を高めることもできます。
Sub HighlightUnpaid()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Set ws = ThisWorkbook.Worksheets("請求管理")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 4).Value = "" Then
' 未入金行を薄い赤で塗る
ws.Rows(i).Interior.Color = RGB(255, 204, 204)
Else
' 入金済み行は色をクリア
ws.Rows(i).Interior.ColorIndex = xlNone
End If
Next i
End Sub
まとめ
- 入金消込の自動化は、請求管理シートと入金データシートの2シート構成で実現できる
- 未入金抽出:D列の入金状況が空欄の行を別シートに転記する
Forループ - 自動照合:取引先名と金額が一致した場合に「入金済み」を自動入力する二重ループ
- 色付け:
Interior.Colorで未入金行を赤系に塗ることで目視確認を補助 - マクロボタンを配置しておくと、経理担当者がワンクリックで実行できる
よくある質問
取引先名の表記ゆれ(株式会社/㈱など)があっても照合できますか?
このコードはそのまま比較するため、表記が違うと一致しません。対策としては、Replace 関数で「株式会社」「㈱」などを統一した文字列に変換してから比較する方法があります。たとえば Replace(名前, "㈱", "株式会社") のように前処理を入れると、照合精度が上がります。
同じ取引先から同額の請求が複数ある場合はどうなりますか?
このコードでは最初に見つかった行だけが「入金済み」になります。複数件に対応するには、照合後に「使用済み」フラグを入金データ側にも付けるなど、追加の処理が必要です。
ボタンにマクロを登録するにはどうすればいいですか?
「開発」タブ→「挿入」→「ボタン(フォームコントロール)」でシートにボタンを配置し、マクロの割り当てダイアログで実行したいマクロ名を選択します。これでボタンをクリックするだけでマクロが実行されるようになります。
入金期限を過ぎた請求のみを抽出することはできますか?
できます。If wsData.Cells(i, 3).Value < Date And wsData.Cells(i, 4).Value = "" Then のように、入金期限列と今日の日付 Date を比較する条件を加えると、期限超過の未入金だけを抽出できます。
自動照合のマクロはどのくらいの件数まで使えますか?
数百〜数千件程度であれば問題なく動作します。件数が多い場合は Application.ScreenUpdating = False を先頭に入れると処理が速くなります。また、マクロ終了後に Application.ScreenUpdating = True で元に戻すのを忘れないようにしましょう。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



