入金待ちの日数を自分の取引で数える|請求日・入金日のCSVから平均と月末の入金待ちを出す

「入金が遅くてお金が足りない」と感じる時、実際に請求書を出してから入金までに何日かかっているのかを、数字で見たことはあるでしょうか。先払いサービスに手数料を払う前に、まず自分の取引の入金待ちの日数と、月末時点で入金待ちの金額を数えておくと、本当に必要かどうかを判断できます。この記事では、請求日・入金日・金額のCSVから、これらを数えるPythonのコードを載せ、架空のサンプルデータで実行した結果を紹介します。

(サンプルのデータは、説明のために筆者が作った架空のものです。実際の取引の数字ではありません)

データの形(invoices.csv)

invoice_date,paid_date,amount
2026-04-30,2026-06-30,120000
2026-05-31,2026-07-31,80000
2026-06-30,2026-08-31,150000
2026-07-31,2026-09-30,60000
2026-08-31,2026-10-31,200000
2026-09-30,2026-11-30,90000

請求日・入金日(または入金予定日)・金額の3列です。実際には、会計ソフトや請求書の一覧から、同じ形で書き出せます。

コード

import csv
from datetime import date

def d(s): return date.fromisoformat(s)
rows = list(csv.DictReader(open("invoices.csv", encoding="utf-8")))
waits = [(d(r["paid_date"]) - d(r["invoice_date"])).days for r in rows]
amounts = [int(r["amount"]) for r in rows]
print("件数", len(rows), "平均", round(sum(waits) / len(waits), 1), "日 / 最長", max(waits), "日 / 最短", min(waits), "日")
print("金額で重みを付けた平均", round(sum(w * a for w, a in zip(waits, amounts)) / sum(amounts), 1), "日")
# 月末時点で、入金待ちの請求の合計
for y, m in ((2026, 7), (2026, 8), (2026, 9)):
    eom = date(y, m, 28)                          # 月末の目安(28日で簡略化)
    pending = sum(a for r, a in zip(rows, amounts) if d(r["invoice_date"]) <= eom < d(r["paid_date"]))
    print(y, m, "月末の入金待ち", f"{pending:,}", "円")

実行結果(Python 3.13)

件数 6 平均 61.2 日 / 最長 62 日 / 最短 61 日
金額で重みを付けた平均 61.2 日
2026 7 月末の入金待ち 230,000 円
2026 8 月末の入金待ち 210,000 円
2026 9 月末の入金待ち 260,000 円

サンプルでは、月末締め・翌々月末払いのような取引を想定しており、請求から入金まで平均61.2日でした。月末の時点で、常に20万円台の入金待ちが残っています。

数字の使い方

  • 入金待ちの日数が長い取引先を特定する:取引先ごとに集計すると、支払いサイクルの相談先が分かります。フリーランス・事業者間取引適正化等法は、一定の取引で、受領から60日以内に支払期日を定める義務があると定めています(公正取引委員会のパンフレットにもとづくとされますが、この記事では原文を確認していません)
  • 月末の入金待ちの金額を、月の経費と比べる:入金待ちが、数か月分の経費を超えるなら、資金繰りが苦しくなりやすい
  • 先払いのコストと比べる:入金待ち20万円の請求を30日早く受け取るなら、手数料10%で2万円。計算は先払い手数料の年率換算にあります
  • 最初に、請求を早く出す・前払いや分割を相談する、といった手段を考える

コードの注意

  • 入金日が空の(未入金の)行がある場合は、date.fromisoformat("") でエラーになります。未入金は、入金予定日を入れるか、行を除いてください
  • 月末は、簡略化して28日を使っています。そのため、実行結果の「月末の入金待ち」は実際の月末(30日・31日)の数字とは違い、例えば7月31日に請求した分は含まれません。厳密に月末日を使うなら、calendar.monthrange で最終日を求めます
  • 金額は円単位の整数を想定しています

この記事で確かめていないこと

  • 実際の取引データでの結果(サンプルは架空のものです)
  • 取引先ごとの法律上の支払期日の判定(取引の内容によります。個別の判断は、専門家や窓口に確認してください)

請求書の先払いサービスの仕組みはペイトナーの請求書先払いにまとめています。

まとめ

  • 先払いサービスを考える前に、請求日と入金日から、入金待ちの日数と、月末の入金待ちの金額を数える
  • 架空のサンプルでは、入金まで平均61.2日、月末の入金待ちは20万円台だった
  • 入金待ちが長い取引先は、支払いサイクルを相談する。先払いは、手数料のコストと比べて判断する

本記事は集計の方法の説明であり、サンプルのデータは架空のものです。