【銀行・経理】入金明細と請求データを照合して消込候補を作る

公開日:2026年10月5日 執筆:Takuya カテゴリ:業種別サンプル

銀行からダウンロードした入金明細と、請求データ(売掛金の一覧)を金額と振込名義で照合し、消込できそうな組み合わせと、確認が必要な入金を分けて一覧にするマクロです。

想定する場面

経理部門では、銀行口座への入金を確認し、どの請求に対する入金かを突き合わせて売掛金を消し込む作業を毎日行います。振込名義は「カ)サンプルショウジ」のような半角カナで、会社名の表記と一致しないことが多く、件数が多いと時間がかかります。

このマクロは、振込名義を正規化(表記をそろえる)したうえで、金額と名義の両方が一致する請求を探し、消込候補として一覧にします。最終的な消込の判断は人が行う前提で、確認の手間を減らすことが目的です。

データの形(例)

2枚のシートを用意します。

  • 「入金明細」シート:A列 入金日、B列 振込名義(半角カナ)、C列 金額、D列 照合結果(マクロが書き込む)
  • 「請求」シート:A列 請求番号、B列 取引先名、C列 取引先カナ(振込名義の想定)、D列 請求金額、E列 消込候補(マクロが書き込む)

コード

振込名義と取引先カナを、全角・半角や「カ)」「(カ」などの法人略称の違いを取り除いた形にそろえてから比べます。「名義と金額が一致する未消込の請求」が1件だけ見つかれば消込候補、複数あれば要確認、見つからなければ照合なし、と分類します。

Function NormKana(ByVal s As String) As String
    Dim t As Variant
    s = StrConv(s, vbNarrow)                         ' 全角 → 半角にそろえる
    For Each t In Array("カ)", "(カ", "カブシキガイシヤ", "ユ)", "(ユ", "ド)", " ", " ", ".", "・")
        s = Replace(s, t, "")
    Next t
    NormKana = UCase(s)
End Function

Sub ReconcileCandidates()
    Dim inWs As Worksheet, bilWs As Worksheet, inData As Variant, bilData As Variant
    Dim i As Long, j As Long, hitRow As Long, hitCnt As Long, used() As Boolean
    Dim res() As Variant, mark() As Variant

    Set inWs = ThisWorkbook.Worksheets("入金明細")
    Set bilWs = ThisWorkbook.Worksheets("請求")
    inData = inWs.Range("A2:C" & inWs.Cells(inWs.Rows.Count, "A").End(xlUp).Row).Value
    bilData = bilWs.Range("A2:D" & bilWs.Cells(bilWs.Rows.Count, "A").End(xlUp).Row).Value
    ReDim used(1 To UBound(bilData, 1))
    ReDim res(1 To UBound(inData, 1), 1 To 1)
    ReDim mark(1 To UBound(bilData, 1), 1 To 1)

    For i = 1 To UBound(inData, 1)
        hitCnt = 0
        For j = 1 To UBound(bilData, 1)
            If Not used(j) And bilData(j, 4) = inData(i, 3) Then
                If NormKana(bilData(j, 3)) = NormKana(inData(i, 2)) Then
                    hitCnt = hitCnt + 1
                    hitRow = j
                End If
            End If
        Next j
        Select Case hitCnt
            Case 1
                used(hitRow) = True
                res(i, 1) = "消込候補:" & bilData(hitRow, 1)
                mark(hitRow, 1) = "入金 " & Format(inData(i, 1), "m/d")
            Case 0
                res(i, 1) = "照合なし(要確認)"
            Case Else
                res(i, 1) = "候補が複数(要確認)"
        End Select
    Next i
    inWs.Range("D2").Resize(UBound(res, 1), 1).Value = res
    bilWs.Range("E2").Resize(UBound(mark, 1), 1).Value = mark
    MsgBox "照合が終わりました。「要確認」の入金は手作業で確認してください。"
End Sub

コードのポイント

一度消込候補にした請求は used 配列で使用済みにして、同じ請求が2つの入金に割り当てられないようにしています。同じ取引先から同じ金額の請求が複数ある場合は、どれに対応するかを機械的に決められないため「候補が複数」として人の確認に回しています。

名義の正規化(NormKana)で取り除く文字は、実際の入金明細を見ながら追加していくのが現実的です。「カ)」の位置が前か後ろか、スペースの有無など、銀行や振込元によって表記が揺れます。

この方法で照合できないもの

振込手数料を差し引いて入金された場合や、複数の請求をまとめて1回で振り込まれた場合、逆に分割で振り込まれた場合は、金額が一致しないため「照合なし」になります。こうした入金は、取引先ごとの入金パターンを把握したうえで、手作業で確認してください。照合のルールを増やしすぎると誤った消込の原因になるため、マクロは「確実なものを先に片付ける」役割にとどめるのが安全です。

  • 振込手数料の差し引き(請求額 − 手数料)
  • 複数請求のまとめ払い
  • 分割払い・前受金

※消込は会計上の重要な処理です。マクロの結果は候補として扱い、最終的な判断と処理は社内の経理ルールに従って行ってください。

ほかの記事