スプレッドシートのIMPORTHTML関数の使い方|Webページの表/リスト取得

スポンサーリンク

「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引数の "table" はHTMLの

要素(表)を取得します。"list"
      要素(箇条書き)を取得します。

      第3引数は、ページ内に同じ要素が複数ある場合に何番目を取得するかの指定です。最初の表を取得したければ 1 を指定します。

      TIP

      目的の表が何番目にあるかわからない場合は、インデックスを 1 から順に変えて試してみてください。

      IMPORTHTML関数の基本的な使い方

      テーブル(表)を取得する

      Webページの表を取得するには、第2引数に "table" を指定します。

      =IMPORTHTML("https://example.com/data", "table", 1)

      ページ内の最初の表が、数式を入力したセルを起点に展開されます。見出し行も含めてそのまま取得されます。

      2番目の表を取得したい場合は、インデックスを 2 に変えるだけです。

      =IMPORTHTML("https://example.com/data", "table", 2)

      リスト(箇条書き)を取得する

      Webページの箇条書きリストを取得するには、第2引数に "list" を指定します。

      =IMPORTHTML("https://example.com/info", "list", 1)

      取得したリストは縦1列にデータが並びます。各項目が1行ずつセルに入ります。

      セル参照でURLを指定する

      URLが長くて数式が読みにくい場合は、別のセルにURLを入力しておく方法が便利です。

      たとえば、A1セルにURLを入力しておけば次のように書けます。

      =IMPORTHTML(A1, "table", 1)

      複数の数式で同じページから異なるテーブルを取得するときに、URLの管理が楽になりますよ。

      IMPORTHTML関数の実践的な使い方・応用例

      Wikipediaの表を取得する

      IMPORTHTML関数がよく使われるのが、Wikipediaに掲載されているデータの取得です。

      Wikipediaの記事には統計データや一覧表が多数掲載されています。たとえば「都道府県の人口一覧」ページにある人口データの表を取得できます。

      =IMPORTHTML("https://ja.wikipedia.org/wiki/都道府県の人口一覧", "table", 1)

      ただし、Wikipediaの記事にはナビゲーション用の表なども含まれています。目的のデータが 1 で取得できない場合は、23 に変えて試してみてください。

      TIP

      Wikipediaの大きな表を取得すると、セルに展開されるまで数秒かかることがあります。データ量が多い場合は少し待ちましょう。

      取得したデータをQUERY関数で加工する

      IMPORTHTML関数で取得したデータに対して、QUERY関数を使えば条件付きの抽出や並べ替えができます。

      =QUERY(IMPORTHTML("https://example.com/data", "table", 1), "SELECT Col1, Col2 ORDER BY Col2 DESC")

      Col1、Col2 のように列番号で指定するのがポイントです。取得範囲の左端が Col1 になります。

      この組み合わせを使えば、「取得→加工」を1つの数式で完結できます。

      取得したデータをFILTER関数で絞り込む

      FILTER関数と組み合わせれば、条件に合うデータだけを取り出せます。

      たとえば、取得した表の2列目が特定の値と一致する行だけを抽出するにはこう書きます。

      =FILTER(IMPORTHTML(A1, "table", 1), INDEX(IMPORTHTML(A1, "table", 1),,2)="東京")

      IMPORTHTML関数を2回呼び出している点に注意してください。データ範囲と条件範囲を別々に指定する必要があるためです。

      TIP

      FILTER関数よりもQUERY関数のほうが数式がシンプルになるケースが多いです。条件付きの加工にはQUERY関数を先に検討してみてください。

      よくあるエラーと対処法

      IMPORTHTML関数で「データが取得できない」ケースをまとめました。

症状原因対処法
#N/A エラー指定したインデックスの要素が存在しないインデックスの数値を変えて試す。ページ内のtable/list数を確認する
#N/A エラーURLが間違っている・ページが存在しないURLをブラウザで開いて正しいか確認する
#VALUE! エラー引数の型が正しくないクエリは "table""list" のみ。インデックスは数値で指定する
データが取得できないサイト側がアクセスを拒否しているrobots.txtやサーバー設定で制限されているサイトからは取得できない
データが空になるJavaScriptで動的に生成された表IMPORTHTML関数はHTMLソースの静的な要素のみ取得可能。動的コンテンツは対象外
古いデータが表示されるキャッシュが更新されていないスプレッドシートを再読み込みする。または数式を一度消して再入力する

#N/A エラーが最もよく出ます。原因の多くは「インデックスの指定ミス」か「URLの誤り」です。

まずはインデックスを 1 にしてデータが取得できるか確認してください。それでもダメなら、ブラウザでURLを開いてページが存在するか確かめましょう。

IMPORTHTML関数の注意点

IMPORTHTML関数を使ううえで知っておきたいポイントをまとめます。

Webサイトの構造変更に注意

取得先のWebページがリニューアルされると、表の順番やHTML構造が変わることがあります。昨日まで動いていた数式が急にエラーになるケースもあるので、定期的に確認しましょう。

リアルタイム更新ではない

取得データは常に最新とは限りません。スプレッドシートを開いたときやセルを再計算したときに更新されます。リアルタイム性が必要なデータには向いていません。

スクレイピング制限

サイトによってはスクレイピング(自動データ取得)を禁止しています。利用規約やrobots.txtを確認して、取得が許可されているか確認してから使いましょう。

大量のIMPORTHTML関数は動作が重くなる

1つのスプレッドシートにIMPORTHTML関数を多用すると、外部通信が増えて動作が重くなります。必要最小限の数式にとどめるのがおすすめです。

WARNING

IMPORTHTML関数で取得するデータの正確性は、取得先のWebサイトに依存します。重要な意思決定に使う場合は、必ず元のWebページで最新データを確認してください。

Excelとの違い

IMPORTHTML関数はGoogleスプレッドシート専用の関数です。Excelには存在しません。

項目GoogleスプレッドシートExcel
IMPORTHTML関数使えるなし
Webデータ取得の代替手段IMPORTHTML / IMPORTXML / IMPORTDATAPower Query「Webからデータを取得」
操作方法セルに数式を入力するだけGUIウィザードで設定
自動更新シート再読み込み時手動更新または自動更新設定

ExcelでWebページの表を取り込みたい場合は、「データ」タブ →「Webから」でPower Queryを使います。GUIで取得先を指定する方法なので、IMPORTHTML関数のように数式1つで完結する手軽さはありません。

Webからのデータ取得を数式で手軽にやりたいなら、スプレッドシートのIMPORTHTML関数が圧倒的に便利です。

IMPORT系関数の使い分け

Googleスプレッドシートには、IMPORTHTML以外にもデータを取得するIMPORT系関数があります。目的に応じて使い分けましょう。

関数取得対象用途例
IMPORTHTMLHTMLのtable / listWebページの表やリストを取得
IMPORTDATACSV / TSVデータ公開されているCSVファイルを取得
IMPORTXMLXMLデータ / XPath指定特定のHTML要素をXPathで指定して取得
IMPORTFEEDRSS / Atomフィードニュースサイトの更新情報を取得
IMPORTRANGE別のスプレッドシート別ファイルのセル範囲を取得

使い分けのポイント: Webページの「表」が欲しいならIMPORTHTML、CSVファイルならIMPORTDATA、HTMLの特定要素をピンポイントで取りたいならIMPORTXMLです。

IMPORTXML関数は XPath という構文で要素を指定するため、HTMLの知識が少し必要です。表やリストだけが欲しい場合は、IMPORTHTML関数のほうが手軽ですよ。

まとめ

IMPORTHTML関数は、WebページのHTMLテーブルやリストをスプレッドシートに取り込める便利な関数です。

ポイントを整理します。

  • 構文は =IMPORTHTML(URL, クエリ, インデックス) で、引数は3つ
  • クエリには "table"(表)または "list"(箇条書き)を指定する
  • インデックスはページ内の何番目の要素かを1から数値で指定
  • Googleスプレッドシート専用の関数で、Excelには存在しない
  • QUERY関数やFILTER関数と組み合わせてデータ加工もできる
  • サイト構造の変更やスクレイピング制限には注意が必要
  • IMPORT系関数(IMPORTDATA / IMPORTXML / IMPORTFEED / IMPORTRANGE)と目的に応じて使い分ける

まずは、Wikipediaなど公開されているページの表で =IMPORTHTML("URL", "table", 1) を試してみてください。数式を入力するだけでデータが取り込める手軽さを実感できますよ。


関連記事

タイトルとURLをコピーしました