PDFをエクセルに変換すると表が崩れる理由と、Excelの標準機能で取り込む方法
PDFの表をExcelに変換すると、列がずれたりセルが結合されたりすることがあります。PDFには表の構造が残っていないことが多く、変換するソフトが表の形を推し量るためです。Excelの「データの取得」でPDFの表を取り込む手順と、使えるExcelのバージョン、崩れたときの直し方を、Microsoftの公式の説明に沿ってまとめました。
取引先から届いた請求明細や、Webで公開されている統計の表がPDFしか無いとき、Excelに移して集計したくなります。ところが、変換サービスやコピーと貼り付けで移すと、列が1つずれたり、複数の行が1つのセルにまとまったりすることがあります。
崩れるのは、PDFの多くに「ここからここまでが1つの表で、この文字はこのセル」という情報が入っていないからです。変換するソフトは、文字の位置から表の形を推し量っています。Microsoft 365のExcel(Windows版)なら、「データ」タブの「データの取得」から「PDF から」を選ぶと、PDFの中の表を見つけて取り込めます。取り込む前に表の候補を見比べて選べるので、貼り付けてから崩れを見つけるより手戻りが少なく済みます。
Excelの「PDF から」で表を取り込む手順
Microsoftの説明では、次の順に操作します。
- Excelで「データ」タブを開き、「データの取得」>「ファイルから」>「PDF から」を選ぶ
- 取り込むPDFファイルを選び、「インポート」をクリックする
- 「ナビゲーター」に表示された、使用可能なテーブルの中から取り込む表を選ぶ
- そのまま使うなら「読み込み」を選び、列を整えてから使うなら「データの変換」を選ぶ
「読み込み」の横にある下向きの矢印から「読み込み先」を選ぶと、表を置く場所を「インポート」の画面で指定できます。「データの変換」を選ぶと、Power Queryの画面でデータを編集してから、Excelに読み込めます。
「PDF から」を選んだときに、追加コンポーネントのインストールを求めるメッセージを見ることがあります。Microsoftの説明では、PDFのコネクタは、Microsoft .NET Framework 4.5以降が入ったパソコンで使えます。
「PDF から」を使えるExcel
Microsoftの「ExcelバージョンのPower Queryデータソース」の表では、PDFのコネクタに印が付いているのは、Microsoft 365のプランの列だけです。Office 2016とOffice 2019の買い切り版の列には、印がありません。この表にはExcel 2021とExcel 2024の列が無く、これらで使えるかどうかは、公式の説明では確かめられませんでした。
Excel for Mac(Microsoft 365)の「データの取得」で使えるデータソースの一覧には、PDFが載っていません。Web用Excelで扱えるのは、職場や学校のSharePointやOneDriveに保存したPDFです。AndroidとiOSのExcelは、Power Queryに対応していません。
表が崩れるのは、PDFに表の構造が残っていないから
Microsoftは、Wordの説明の中で、PDFを固定のファイル形式だと述べています。PDFが保存しているのは、ページの上の文字や画像や線の位置です。それらのあいだの関係は、必ずしも保存されていません。
同じ説明では、ほとんどのPDFには、段落や表や列のような構造の情報が含まれていません。表も、セルの中身とは関係の無い行の集まりとして保存されています。このため、変換するソフトは、文字の並び方や罫線から、どこが1つのセルかを判断することになります。たとえばWordは、PDFを開くときに複雑なルールを使い、見出しや表などのどれに当たるかを検出しています。
取り込んだ表が崩れたときに直す方法
罫線をセルの境目として使わせる
Power Queryの画面では、PDFの表を読み取る関数「Pdf.Tables」が使われます。数式バーまたは「高度なエディター」で、この関数にオプションを足せます。
「EnforceBorderLines」をtrueにすると、PDFの罫線を常にセルの境目として扱います。既定値はfalseです。falseのときは、罫線はセルの境目を決める手がかりの1つにとどまります。罫線のはっきりした表で列がずれるときは、Pdf.Tables(File.Contents("C:\sample.pdf"), [EnforceBorderLines=true]) のように書き足して、結果を見比べてください。
ページをまたぐ表を分ける
「MultiPageTables」は、続くページにある似た表を、1つの表に自動でまとめるかどうかの設定です。既定値はtrueです。別々の表が1つにまとまってしまうときは、falseにすると、ページごとの表として取り込めます。
必要なページだけを読む
大きなPDFでは、「StartPage」と「EndPage」で読むページの範囲を指定できます。Microsoftは、大きなPDFでのタイムアウトを減らす方法として、1ページずつや狭い範囲で読む方法を案内しています。PDF全体が1つの大きな表の場合は、MultiPageTablesをオフにすると役立つ可能性がある、とも説明しています。
2行に分かれたデータをまとめる
1つのセルの中身が2行に分かれ、別々の行として取り込まれることがあります。Microsoftは、このような場合にPower Queryの操作でデータを整えられる場合がある、と説明しています。例として、隣の行に値をコピーする「Table.FillDown」と、隣り合う行をまとめる「Table.Group」が挙げられています。
ほかの方法
WordでPDFを開いてから表をコピーする
Wordでは、PDFを開くとコピーを作ってWord文書に変換します。元のPDFは、そのまま残ります。変換した文書から表をコピーして、Excelに貼り付ける方法もあります。
Microsoftの説明では、この変換は、ビジネス文書のような文字の多いファイルで最もうまく働きます。ただし、変換した文書が元のPDFと同じ見た目になるとは限りません。グラフの多いPDFでは、ページ全体が画像になり、文字を編集できないことがあります。セルの間隔がある表も、うまく変換されない要素として挙げられています。
表が見つからないPDF
「ナビゲーター」に表が出てこない場合、PDFの文字が画像になっていることも考えられます。紙をスキャンしたPDFが、その例です。ただし、PDFのコネクタがスキャンしたPDFを読めるかどうかは、Microsoftの公式の説明では確かめられませんでした。PDFの中の文字を選べるかどうかを、PDFを開くソフトで先に確かめてください。