「Webページにある表のデータを、スプレッドシートに手入力するのが面倒」。そんな経験はありませんか。
コピペで貼り付ける方法もありますが、レイアウトが崩れたり更新のたびに貼り直したりと手間がかかります。
そんなときに便利なのが IMPORTHTML関数 です。URLを指定するだけで、Webページの表やリストをスプレッドシートに自動で取り込めます。
この記事では、IMPORTHTML関数の基本から実務で役立つ活用パターンまで解説します。
IMPORTHTML関数とは?
IMPORTHTML関数は、Webページ内のHTMLテーブル(表)やリスト(箇条書き)をスプレッドシートに取得する関数です。
名前は英語の「import(取り込む)」と「HTML(Webページの記述言語)」が由来です。
たとえば、次のようなデータを取得できます。
- Webページに掲載されている統計データの表
- ランキング形式のリスト
- 製品仕様の比較表
URLを入力して「何番目の表か」を指定するだけで、データが自動的にセルに展開されます。
NOTE
IMPORTHTML関数はGoogleスプレッドシート専用の関数です。Excelには同じ関数は存在しません。ExcelでWebデータを取得するには、Power Queryの「Webからデータを取得」機能を使います。
IMPORTHTML関数の書き方(構文と引数)
基本構文
=IMPORTHTML(URL, クエリ, インデックス)
カッコの中に3つの引数を指定します。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| URL | 必須 | データを取得したいWebページのURL。文字列で指定 |
| クエリ | 必須 | 取得する要素の種類。"table" または "list" を指定 |
| インデックス | 必須 | ページ内の何番目の要素かを数値で指定(1から始まる) |
第1引数には、対象のWebページのURLをダブルクォーテーションで囲んで指定します。
第2引数の 第3引数は、ページ内に同じ要素が複数ある場合に何番目を取得するかの指定です。最初の表を取得したければ TIP 目的の表が何番目にあるかわからない場合は、インデックスを Webページの表を取得するには、第2引数に ページ内の最初の表が、数式を入力したセルを起点に展開されます。見出し行も含めてそのまま取得されます。 2番目の表を取得したい場合は、インデックスを Webページの箇条書きリストを取得するには、第2引数に 取得したリストは縦1列にデータが並びます。各項目が1行ずつセルに入ります。 URLが長くて数式が読みにくい場合は、別のセルにURLを入力しておく方法が便利です。 たとえば、A1セルにURLを入力しておけば次のように書けます。 複数の数式で同じページから異なるテーブルを取得するときに、URLの管理が楽になりますよ。 IMPORTHTML関数がよく使われるのが、Wikipediaに掲載されているデータの取得です。 Wikipediaの記事には統計データや一覧表が多数掲載されています。たとえば「都道府県の人口一覧」ページにある人口データの表を取得できます。 ただし、Wikipediaの記事にはナビゲーション用の表なども含まれています。目的のデータが TIP Wikipediaの大きな表を取得すると、セルに展開されるまで数秒かかることがあります。データ量が多い場合は少し待ちましょう。 IMPORTHTML関数で取得したデータに対して、QUERY関数を使えば条件付きの抽出や並べ替えができます。 Col1、Col2 のように列番号で指定するのがポイントです。取得範囲の左端が Col1 になります。 この組み合わせを使えば、「取得→加工」を1つの数式で完結できます。 FILTER関数と組み合わせれば、条件に合うデータだけを取り出せます。 たとえば、取得した表の2列目が特定の値と一致する行だけを抽出するにはこう書きます。 IMPORTHTML関数を2回呼び出している点に注意してください。データ範囲と条件範囲を別々に指定する必要があるためです。 TIP FILTER関数よりもQUERY関数のほうが数式がシンプルになるケースが多いです。条件付きの加工にはQUERY関数を先に検討してみてください。 IMPORTHTML関数で「データが取得できない」ケースをまとめました。 まずはインデックスを IMPORTHTML関数を使ううえで知っておきたいポイントをまとめます。 Webサイトの構造変更に注意 取得先のWebページがリニューアルされると、表の順番やHTML構造が変わることがあります。昨日まで動いていた数式が急にエラーになるケースもあるので、定期的に確認しましょう。 リアルタイム更新ではない 取得データは常に最新とは限りません。スプレッドシートを開いたときやセルを再計算したときに更新されます。リアルタイム性が必要なデータには向いていません。 スクレイピング制限 サイトによってはスクレイピング(自動データ取得)を禁止しています。利用規約やrobots.txtを確認して、取得が許可されているか確認してから使いましょう。 大量のIMPORTHTML関数は動作が重くなる 1つのスプレッドシートにIMPORTHTML関数を多用すると、外部通信が増えて動作が重くなります。必要最小限の数式にとどめるのがおすすめです。 WARNING IMPORTHTML関数で取得するデータの正確性は、取得先のWebサイトに依存します。重要な意思決定に使う場合は、必ず元のWebページで最新データを確認してください。 IMPORTHTML関数はGoogleスプレッドシート専用の関数です。Excelには存在しません。 ExcelでWebページの表を取り込みたい場合は、「データ」タブ →「Webから」でPower Queryを使います。GUIで取得先を指定する方法なので、IMPORTHTML関数のように数式1つで完結する手軽さはありません。 Webからのデータ取得を数式で手軽にやりたいなら、スプレッドシートのIMPORTHTML関数が圧倒的に便利です。 Googleスプレッドシートには、IMPORTHTML以外にもデータを取得するIMPORT系関数があります。目的に応じて使い分けましょう。 使い分けのポイント: Webページの「表」が欲しいならIMPORTHTML、CSVファイルならIMPORTDATA、HTMLの特定要素をピンポイントで取りたいならIMPORTXMLです。 IMPORTXML関数は XPath という構文で要素を指定するため、HTMLの知識が少し必要です。表やリストだけが欲しい場合は、IMPORTHTML関数のほうが手軽ですよ。 IMPORTHTML関数は、WebページのHTMLテーブルやリストをスプレッドシートに取り込める便利な関数です。 ポイントを整理します。 まずは、Wikipediaなど公開されているページの表で "table" はHTMLの 要素(表)を取得します。
"list" は や 要素(箇条書き)を取得します。
1 を指定します。1 から順に変えて試してみてください。IMPORTHTML関数の基本的な使い方
テーブル(表)を取得する
"table" を指定します。=IMPORTHTML("https://example.com/data", "table", 1)2 に変えるだけです。=IMPORTHTML("https://example.com/data", "table", 2)リスト(箇条書き)を取得する
"list" を指定します。=IMPORTHTML("https://example.com/info", "list", 1)セル参照でURLを指定する
=IMPORTHTML(A1, "table", 1)IMPORTHTML関数の実践的な使い方・応用例
Wikipediaの表を取得する
=IMPORTHTML("https://ja.wikipedia.org/wiki/都道府県の人口一覧", "table", 1)1 で取得できない場合は、2 や 3 に変えて試してみてください。取得したデータをQUERY関数で加工する
=QUERY(IMPORTHTML("https://example.com/data", "table", 1), "SELECT Col1, Col2 ORDER BY Col2 DESC")取得したデータをFILTER関数で絞り込む
=FILTER(IMPORTHTML(A1, "table", 1), INDEX(IMPORTHTML(A1, "table", 1),,2)="東京")よくあるエラーと対処法
症状 原因 対処法 #N/A エラー指定したインデックスの要素が存在しない インデックスの数値を変えて試す。ページ内のtable/list数を確認する #N/A エラーURLが間違っている・ページが存在しない URLをブラウザで開いて正しいか確認する #VALUE! エラー引数の型が正しくない クエリは "table" か "list" のみ。インデックスは数値で指定するデータが取得できない サイト側がアクセスを拒否している robots.txtやサーバー設定で制限されているサイトからは取得できない データが空になる JavaScriptで動的に生成された表 IMPORTHTML関数はHTMLソースの静的な要素のみ取得可能。動的コンテンツは対象外 古いデータが表示される キャッシュが更新されていない スプレッドシートを再読み込みする。または数式を一度消して再入力する #N/A エラーが最もよく出ます。原因の多くは「インデックスの指定ミス」か「URLの誤り」です。1 にしてデータが取得できるか確認してください。それでもダメなら、ブラウザでURLを開いてページが存在するか確かめましょう。IMPORTHTML関数の注意点
Excelとの違い
項目 Googleスプレッドシート Excel IMPORTHTML関数 使える なし Webデータ取得の代替手段 IMPORTHTML / IMPORTXML / IMPORTDATA Power Query「Webからデータを取得」 操作方法 セルに数式を入力するだけ GUIウィザードで設定 自動更新 シート再読み込み時 手動更新または自動更新設定 IMPORT系関数の使い分け
関数 取得対象 用途例 IMPORTHTML HTMLのtable / list Webページの表やリストを取得 IMPORTDATA CSV / TSVデータ 公開されているCSVファイルを取得 IMPORTXML XMLデータ / XPath指定 特定のHTML要素をXPathで指定して取得 IMPORTFEED RSS / Atomフィード ニュースサイトの更新情報を取得 IMPORTRANGE 別のスプレッドシート 別ファイルのセル範囲を取得 まとめ
=IMPORTHTML(URL, クエリ, インデックス) で、引数は3つ"table"(表)または "list"(箇条書き)を指定する=IMPORTHTML("URL", "table", 1) を試してみてください。数式を入力するだけでデータが取り込める手軽さを実感できますよ。
関連記事
