PDFをExcelに:表の抽出は実際にどう行われるのか
PDFの中に表が見えています。行、列、見出し、そして一番下に合計があります。変換ツールがそれをそのままスプレッドシートに移せるのは当然のように思えます。問題は、PDFには表が含まれていないことです。含まれているのは、ある位置に文字を、別の位置に線を描くという命令であり、目に見える格子は人の目が組み立てたものです。PDFをExcelに変換するツールはどれも、そうしたばらばらの断片から表を組み立て直さなければなりません。結果が完璧なものから使い物にならないものまでさまざまなのは、そのためです。このガイドでは、その組み立て直しの仕組み、失敗する箇所、そしてどちらの場合でもきれいな数字をExcelに取り込む方法を説明します。
PDFの表の中身は実際どうなっているのか
「コンサルティング料」「2026年3月12日」「1,250.00」という3つの列を持つ請求書の1行を例にしましょう。PDFの中では、これはそれぞれにxとyの座標を持つ、別々のテキストの断片の集まりです。断片は単語と一致するとは限りません。「1,250.00」を1つの断片として書き込むソフトウェアもあれば、「1,2」と「50.00」に分けて書き込むもの、1文字ずつ別々に配置するものもあります。読む順番に並んでいるとも限りません。表全体を1列ずつ描くソフトウェアもあります。
格子の線は、テキストとは無関係な別の描画命令です。太い線が多数の短い線分で描かれていることもあれば、網掛けの行が線のない塗りつぶしの四角形であることもあり、線がまったくない表も数多くあります。ファイルの中には、「これはセルです」「この2つのセルは結合されています」「この行は表に属しています」といった情報は何もありません。
変換ツールが表を見つける2つの方法
表を抽出するツールは、一般に2つの方法のどちらかを使います。TabulaやCamelotなどのオープンソースのツールでは、それぞれ「lattice」「stream」と呼ばれています。
- 罫線をたどる方法(lattice):変換ツールは水平線と垂直線を集め、それらが交わる位置を割り出し、囲まれた各領域をセルとして扱います。そして、テキストの断片をそれぞれが収まるセルに入れていきます。格子がすべてそろった表では、非常にうまくいきます。線がない場合、線が断片に分かれてきちんとつながっていない場合、罫線の代わりに網掛けが使われている場合には失敗します。
- 余白をたどる方法(stream):変換ツールはページ上の高さでテキストを行にまとめ、行をまたいで一貫して縦に続く隙間を探し、それを列の境界として扱います。多くの財務諸表のような罫線のない表にも対応できます。列どうしが近い場合、列がそろえではなく中央寄せになっている場合、ある行の長い値が、ほかのすべての行で2つの列を隔てている隙間をまたいでしまう場合には、うまくいきません。
どちらの方法も経験則に基づくものです。整った規則的な表では信頼できますが、それ以外では信頼できません。すべての表を正しく変換できるツールがないのは、そのためです。
表の抽出がうまくいかない箇所
列を正しく見つけられた場合でも、繰り返し起きる問題があります。
- 折り返したセル:2行目に折り返した説明文は、1つの列だけが埋まった新しい行のように見えます。
- 結合した見出しや複数列にまたがる見出し:2つの列の上にある見出しは、どちらか一方に割り当てるか、どちらにも割り当てないかを決めなければなりません。
- 改ページ:次のページに続く表では見出しが繰り返され、1つの行が改ページで分割されることもあります。
- テキストとして取り込まれる数字:通貨記号、桁区切り記号、かっこで示した負の数、数字に付いた脚注記号は、いずれもExcelが数値として認識するのを妨げることがあります。「1.250,00」のように小数点にカンマを使う表記は、Excelが同じ表記を使う設定の場合にのみ正しく読み取られます。
- あいまいな日付:03/04/2026は、国によって4月3日にも3月4日にもなり、Excelは設定に基づいてどちらかを選びます。
- 文字の対応表がないフォント:一部のPDFは、各グリフを文字に戻すための対応表なしでフォントを埋め込んでいます。表示は完璧ですが、テキストをコピーしたり抽出したりすると意味不明な文字列になります。
- スキャン:スキャンしたページにはテキストがまったくなく、テキストを写した画像があるだけなので、先にOCRを行わなければ抽出できるものは何もありません。
当サイトの「PDFをExcelに変換」ツールの動作
当サイトの「PDFをExcelに変換」ツールはブラウザー内で動作するため、ファイルはアップロードされません。PDFの各ページに、「ページ1」「ページ2」といった名前の個別のワークシートを割り当てます。A列には、ページ上のすべてのテキストの行を上から順に1行ずつ書き込み、各画像はページ上で描かれていた位置に配置します。
列の位置を推測しようとはしません。そのため、すべての行が読む順番のまま残り、推測を誤って抜け落ちたり別の列に入ったりすることはありません。ただしその分、表の1行は値が半角スペース1つで区切られた1つのセルとして取り込まれるので、ご自身で列に分割する必要があります。PDFが表を1列ずつ描いていた場合は、1つの行の値が連続するセルに分かれて取り込まれることもあります。
OCRは行わないため、スキャンしたページはテキストではなく画像として取り込まれます。開くのにパスワードが必要なPDFは、先にロックを解除する必要があります。
Excelで1つの列を本当の列に分割する
作業の後半には、Excelに優れたツールがあります。
- [データ]タブの[区切り位置]は、区切り文字で列を分割します。「区切り記号付き」を選び、次に「スペース」を選びます。値そのものにスペースが含まれていない場合はうまくいき、数字やコードの表ではよくあることです。最後の手順の[詳細]で小数点と桁区切りの記号を設定できるので、「1.250,00」のような表記の数字も直せます。
- フラッシュフィル(Ctrl+E)は、例から学習します。最初の行から取り出したい値を隣の列に入力してCtrl+Eを押すと、Excelが同じパターンに従って残りを埋めます。
- Microsoft 365版Excelの関数:
=TEXTSPLIT(A2," ")は1行を複数の列に展開し、=TEXTAFTER(A2," ",-1)は最後のスペースより後ろのすべて、つまりたいていは行末の金額を返します。数値に変換するにはVALUE()で囲みます。
Windows版のMicrosoft 365のExcelでは、[データ]→[データの取得]→[ファイルから]→[PDFから]でPDFを直接読み込むこともできます。Excelが自分で表を探すので、罫線がはっきりした表なら試してみる価値があります。
試す価値のあるほかの方法
PDFから表を取り出す最も確実な方法は、そもそもPDFから取り出さないことです。数字はもともとスプレッドシート、会計システム、データベースで作られたものであり、PDFを作った人は、たいてい同じデータをスプレッドシートやCSVファイルとして書き出せます。たとえば多くの銀行では、明細書をPDFだけでなくCSVでもダウンロードできます。
罫線の格子がすべてそろった表なら、「PDFをWordに変換」を試してみる価値があります。表が本物のWordの表として取り込まれれば、Excelにコピーしてもセルはセルのまま残ります。「PDFをWordに変換」はスキャンしたページにOCRを実行するので、スキャンした表にもこの方法が使えます。
使う前に結果を確認する
抽出の誤りは目立ちません。別の列に入った値も、正しい列にある値と同じようにもっともらしく見えます。抽出したデータに頼る前に、次のことを確認しましょう。
SUMで列を合計し、PDFに印刷されている合計と比べます。一致すれば、数字はほぼ確実に正しく取り込まれています。これが最も効果的な確認方法です。- PDFと行数を照らし合わせ、改ページで問題が起きやすい各ページの最初と最後の行をよく確認します。
- テキストとして保存された数字を探します。Excelでは、既定でそれらはセルの左に寄せて表示され、小さな緑の三角形が付きます。
- いくつかの日付、特に日が12以下のものを手作業で確認します。
まとめ
PDFの表は表の絵であり、つながって見えるだけのテキストと線でできています。変換ツールは罫線か余白をもとにそれを組み立て直しますが、どちらの方法も不規則なレイアウトでは失敗します。このことを知っていれば、適切な方法を選べます。できるなら元のデータを依頼し、できないなら行を抽出してExcelで分割し、数字を重要な場所に使う前には必ず合計を確認しましょう。
PDFのテキストをスプレッドシートに取り込みたいですか?「PDFをExcelに変換」をお試しください。
← ブログに戻る