【Googleスプレッドシート】WebページのテーブルをIMPORTHTMLで取込!table指定の手順
Webページに掲載されている表データを手作業でコピーするのは、時間も手間もかかりますよね。Googleスプレッドシートには、Webページのテーブルを自動で取り込めるIMPORTHTML関数が用意されています。この関数を使えば、コピー&ペーストの手間を省き、動的にデータを更新することも可能です。この記事では、IMPORTHTML関数のtable指定を使った具体的な取り込み手順と、失敗しないための注意点を詳しく解説します。
【要点】IMPORTHTMLでWebページのテーブルを正しく取り込む方法
- =IMPORTHTML(URL, “table”, インデックス): ページ内のテーブルを指定したインデックス番号で取得します。第2引数は必ず半角ダブルクォーテーションで囲んだ”table”と指定します。
- インデックス番号の指定: ページ内に複数のテーブルがある場合、1から始まる番号で対象を指定します。左上から数えた出現順に割り振られます。
- 更新頻度の制限: IMPORTHTMLは約1時間ごとに自動更新されますが、頻繁な手動更新は制限されるため注意が必要です。
IMPORTHTML関数の概要と仕組み
IMPORTHTML関数は、指定したWebページのHTMLソースを解析し、table要素またはlist要素(ul/ol)をスプレッドシートに取り込む関数です。第2引数に”table”を指定すると、ページ内のすべての
タグが対象になります。インデックス番号で取得するテーブルを選ぶ仕組みです。たとえば、Wikipediaの人口ランキング表や、気象庁のアメダス観測データ表など、構造化されたテーブルデータに最適です。
ただし、すべてのWebサイトに対応しているわけではありません。ページがJavaScriptで動的に生成されている場合や、ログインが必要なページではデータを取得できません。また、サイトの利用規約によってスクレイピングが禁止されている場合もあるため、事前に確認が必要です。
IMPORTHTMLでWebページのテーブルを取り込む手順
ここからは、実際にIMPORTHTML関数を使ってテーブルを取り込む具体的な手順を説明します。例として、Wikipediaの「日本の都道府県別人口ランキング」ページから表を取得してみます。
手順1: 対象のWebページのURLを確認する
- ブラウザで目的のページを開く
取り込みたいテーブルが含まれているWebページをブラウザで開き、アドレスバーのURLをコピーします。URLは必ずhttpsから始まる完全な形式にしてください。
- テーブルの位置を確認する
ページ内に複数のテーブルがある場合、どのテーブルが何番目に出現するかを確認します。ページの上部にあるテーブルから順に1,2,3…と番号が振られます。
手順2: Googleスプレッドシートに関数を入力する
- セルを選択する
取り込んだテーブルの左上が表示されるセルをクリックします。
- 数式を入力する
選択したセルに以下のように入力します。
=IMPORTHTML("https://example.com/page", "table", 1)
URL部分は実際のページURLに置き換えてください。第2引数は必ず半角のダブルクォーテーションで囲んだ”table”と指定します。
- Enterキーを押す
数式を確定すると、スプレッドシートがそのページにアクセスし、テーブルデータが展開されます。初回は「読み込み中…」と表示され、数秒から数十秒でデータが表示されます。
手順3: インデックス番号を調整する
取得したいテーブルが表示されない場合は、インデックス番号を変更してみてください。たとえば、1を2や3に変えて再試行します。ページ内のテーブル数を確認するには、ブラウザの「ページのソースを表示」機能で
タグを検索すると便利です。
手順4: データが正しく表示されているか確認する
取り込んだテーブルの行数・列数・表示内容が元のWebページと一致しているか確認します。特にヘッダー行や数値の書式が崩れていないか注意してください。IMPORTHTMLは元のHTMLの構造をそのまま反映するため、セル結合やスタイルは保持されません。
IMPORTHTML使用時の注意点とよくあるトラブル
エラーが表示される場合の対処法
関数がエラーを返す代表的な原因は、URLの誤り、インデックス番号の間違い、ページがアクセス不能、またはテーブルが存在しないことです。まずはURLが正しいか確認し、インデックス番号を1から順に試してください。また、数式の引用符が全角になっていないかもチェックしましょう。
取得したデータが古いまま更新されない
IMPORTHTMLは約1時間ごとに自動で再取得を行います。ただし、Googleスプレッドシートのサーバー側でキャッシュが保持されるため、更新が即時反映されない場合があります。強制的に更新したい場合は、数式を再入力するか、スプレッドシートを開き直してください。
ページ構造の変化でデータが取れなくなる
WebサイトのリニューアルやHTML構造の変更により、IMPORTHTMLが正しく機能しなくなることがあります。その場合は、関数のインデックス番号を変更するか、別のスクレイピング手段(IMPORTXMLなど)を検討してください。
大量のデータを取得すると重くなる
非常に大きなテーブル(数千行以上)を取得すると、スプレッドシートの動作が重くなることがあります。そのような場合は、必要な列だけを抽出するQUERY関数と組み合わせるか、インポートする範囲を制限する方法を検討しましょう。
IMPORTHTMLとIMPORTXMLの比較
| 関数 |
取得対象 |
指定方法 |
使用例 |
| IMPORTHTML |
テーブル(
)またはリスト(
/
)
| 第2引数に”table”または”list”、第3引数にインデックス番号 |
=IMPORTHTML(A1,”table”,1) |
| IMPORTXML |
XPathで指定した任意の要素や属性 |
第2引数にXPathクエリ |
=IMPORTXML(A1,”//table[1]//tr”) |
| IMPORTFEED |
RSS/Atomフィード |
フィードURLのみ |
=IMPORTFEED(A1) |
| IMPORTDATA |
CSVやTSVなどのテキストデータ |
ファイルのURL |
=IMPORTDATA(A1) |
IMPORTHTMLはテーブル専用でシンプルに使えるのに対し、IMPORTXMLはXPathを使ってより細かい抽出が可能です。ただし、IMPORTXMLは習得にXPathの知識が必要です。用途に応じて使い分けてください。
まとめ
IMPORTHTML関数を使えば、Webページのテーブルデータを数式一つでスプレッドシートに取り込めます。手順は、対象ページのURLをコピーし、セルに関数を入力し、インデックス番号を指定するだけです。データが更新されるたびに自動で再取得されるため、常に最新の情報を扱えます。ただし、ページ構造の変更や更新頻度の制限には注意が必要です。まずはIMPORTHTMLでシンプルにテーブルを取り込み、必要に応じてIMPORTXMLやQUERYと組み合わせてみてください。
この記事の監修者
✍️
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
|