入金待ちの日数を自分の取引で数える|請求日・入金日の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万円台だった
- 入金待ちが長い取引先は、支払いサイクルを相談する。先払いは、手数料のコストと比べて判断する
本記事は集計の方法の説明であり、サンプルのデータは架空のものです。


