追加検証 / 結合セルと分類別集計
PDFの結合セル補完で、
分類別集計はどう変わる?
総額が合っていても、分類別の合計まで合っているとは限りません。結合セルのある自作PDFを改めて抽出し、分類の空欄を補完する前後で金額を比較しました。
補完前に「分類名の付いた行だけ」を集計すると8,000円。空欄グループの52,000円が対象から外れます。元PDFの結合範囲に沿って6セルを補完すると、分類別の金額も正解データに一致しました。
1. PDFの結合セルは、抽出後に6か所の空欄になった
元の表では「事務用品」「保管用品」が、それぞれ4行分を縦に結合したセルに入っています。pdfplumberで抽出すると、各分類の先頭行には文字が残り、続く3行ずつは空欄になりました。数量・単価・金額は8行とも残っています。

2026年9月12日に、この公開済みPDFを現在の環境で3回抽出し、表の内容が同じになることを確認しました。以前のノートPCの実行ログを復元した結果ではなく、新しく実行した検証です。補完前後の8行の表も別ページで見比べられます。
2. 空欄を残した集計と、除いた集計を区別する
まず、空欄も一つのグループとして集計しました。これなら補完前でも総額は一致します。そのうえで、元PDFの結合範囲に沿って分類だけを補い、同じ条件で再集計しました。
| 分類 | 補完前 | 補完後 | 正解データ |
|---|---|---|---|
| 事務用品 | 500 | 10,000 | 10,000 |
| 保管用品 | 7,500 | 50,000 | 50,000 |
| 空欄 | 52,000 | 0 | 0 |
| 総額(空欄も含む) | 60,000 | 60,000 | 60,000 |
補完前に分類名のあるグループだけを見ると、500+7,500=8,000円です。残りの52,000円は、抽出から失われたのではありません。空欄グループに残っています。空欄をフィルターで除くなどの操作をしたときに、集計対象から外れるという違いです。
補完後は事務用品4行・数量14・10,000円、保管用品4行・数量30・50,000円になりました。分類だけでなく、ID・品名・数量・単価・金額を含む48セルも、数値3列を整数にそろえたうえで正解データと照合し、すべて一致しました。
3. 空欄を一律に埋めず、元の結合範囲で止める
今回のコードは、直前の分類セルが覆う範囲に対象行が入っていて、独立した分類セルが存在しない場合だけ補完します。実際に変更したのは、管理番号0002・0003・0004・0006・0007・0008の分類6セルです。他の42セルは変更していません。
- 先頭行の分類が空欄なら、推測で埋めず処理を止める。
- 元の結合範囲を越えた空欄や、独立した空欄セルは埋めない。
- 管理番号の欠落・重複があれば止める。
- 補完後の全セルを正解データと照合し、総額が変わっていないか確認する。
異常な入力を使った4種類の停止テストに加え、金額を1円変えたデータが正解照合で不一致になることも確認しました。検査結果は配布する実行レポートに記録しています。
4. 元PDFから再実行できる資料
入力PDF・正解Excel・補完前後のCSVとJSON・集計結果・実行コードを一つにまとめました。実行環境はWindows、Python 3.12.14、pdfplumber 0.11.9、openpyxl 3.1.5です。実行日時と各ファイルの照合用ハッシュも保存しています。
CSVをExcelで直接開くと、管理番号の先頭ゼロが失われる場合があります。管理番号列を文字列として取り込むか、保存値をJSONで確認してください。今回はCSVをExcelで開き直した結果までは測定していません。
一つの架空資料による結果であり、全PDFへの精度、作業時間の短縮、製品間の優劣は示していません。Adobeでの新しい変換試験も行っていません。
変換後は総額だけでなく、「分類の空欄は何行あるか」「その行の金額はいくらか」まで確かめる。今回の表では、その確認が52,000円分の分類漏れを見つける手がかりになりました。
空欄・重複番号・合計不一致を確認するExcelテンプレートを企画中です。まだ販売・予約は行っていません。予定価格1,980円の商品案と無料チェックリストを見る →