【Googleスプレッドシート】Web上の表をIMPORTHTMLで取り込む!定期更新の仕組み

【Googleスプレッドシート】Web上の表をIMPORTHTMLで取り込む!定期更新の仕組み
🛡️ 超解決

Webサイトに掲載されている表を毎回コピー&ペーストしてスプレッドシートに貼り付けている方は多いのではないでしょうか。この作業を手動で行うと更新漏れや転記ミスが発生しやすくなります。IMPORTHTML関数を使えば、HTMLの表データを自動で取得してスプレッドシートに反映させることが可能です。本記事ではIMPORTHTMLの基本構文から定期的に自動更新する仕組みまで、具体例を交えて解説します。

【要点】IMPORTHTMLでWebの表を自動取得し、定期的に更新する方法

  • =IMPORTHTML(url, “table”, 1) の基本構文: WebページのURLと取得するテーブルの番号を指定するだけで表データを取り込めます。
  • トリガー付きApps Scriptで定期更新: スクリプトにsetTimeoutsやトリガーを組み込めば、指定時間ごとにデータを再取得できます。
  • 手動更新のショートカットキー: Ctrl+Shift+F5(Windows)またはCmd+Shift+F5(Mac)で即座に再計算を実行できます。

ADVERTISEMENT

IMPORTHTML関数の仕組みとできること

IMPORTHTMLは、Googleスプレッドシートに標準搭載されている関数の一つです。指定したWebページのHTMLソースからテーブル(<table>タグ)またはリスト(<ul>や<ol>タグ)を抽出し、スプレッドシートのセルに展開します。この関数により、株価の一覧、ニュースのランキング、商品価格の比較表など、Web上に公開された表データを手動コピーなしで取得できます。

関数の構文は「=IMPORTHTML(url, query, index)」です。第1引数に取得元の完全なURLを引用符で囲んで指定します。第2引数は「”table”」または「”list”」を指定し、第3引数でページ内の何番目のテーブル・リストかを1から始まる番号で指定します。

ただし、IMPORTHTMLはGoogleのサーバー経由で動作するため、対象ページがアクセス制限をかけていたり、JavaScriptで動的に生成される表には対応できません。また、更新頻度はデフォルトで約1時間に1回程度ですが、手動で強制的に更新することも可能です。

IMPORTHTMLでWebの表を取り込む手順

基本のIMPORTHTML関数の入力

まずは具体的なWebページの表をスプレッドシートに取り込んでみましょう。今回は例として、架空の気温データ表を使います。

  1. 取得したいWebページのURLを確認します
    ブラウザで開いた状態でアドレスバーのURLをコピーしてください。URLは必ず引用符で囲む必要があるため、後で貼り付けます。
  2. セルにIMPORTHTML関数を入力します
    スプレッドシートの任意のセルに「=IMPORTHTML(“https://example.com/weather.html”, “table”, 1)」と入力します。この例ではURLを実際のものに置き換えてください。
  3. Enterキーで確定します
    数秒の読み込み後、表のデータがセル範囲に展開されます。横方向と縦方向に自動的に広がります。

関数が正しく動作すると、指定したテーブルのヘッダー行も含めてすべてのデータが表示されます。もしエラーが表示された場合は、URLが正しいか、テーブルのインデックス番号が正しいかを確認してください。

定期的に自動更新する仕組み

IMPORTHTMLはデフォルトで一定時間ごとに再計算されますが、より細かい更新間隔を設定したい場合はGoogle Apps Scriptを利用します。以下に定期更新を実現する手順を示します。

  1. 拡張機能メニューからApps Scriptを開きます
    スプレッドシートのメニューバーで「拡張機能」→「Apps Script」をクリックします。
  2. スクリプトエディタに関数を記述します
    コード.gsに以下のような関数を書きます。
    function forceRefresh() { SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1").getRange("A1").setValue("=IMPORTHTML(\"https://example.com/weather.html\",\"table\",1)"); }
    この関数はセルA1に再びIMPORTHTMLを設定することで強制的に再計算させます。
  3. トリガーを設定します
    スクリプトエディタの左側メニューで「トリガー」を開き、「トリガーを追加」をクリックします。「時間主導型」を選択し、更新したい間隔(たとえば「1時間おき」)を設定します。
  4. プロジェクトを保存して実行許可を与えます
    初回は権限の承認が必要です。Googleアカウントの許可画面が表示されたら「許可」をクリックしてください。

これで指定した時間ごとにIMPORTHTMLが再実行され、表のデータが自動更新されるようになります。

IMPORTHTML使用時の注意点とよくあるトラブル

#REF! エラーが表示される

主な原因はテーブルのインデックス番号が間違っているか、対象ページにテーブルが存在しないことです。まずはブラウザの開発者ツールでページのHTMLを確認し、<table>タグが何個あるかを調べます。インデックスは1から始まるため、2番目のテーブルを取得したい場合は「3」ではなく「2」を指定します。

データが古いまま更新されない

IMPORTHTMLは自動的にキャッシュされるため、最新データが即座に反映されないことがあります。手動で更新するには、関数が入力されたセルを選択し、Ctrl+Shift+F5(Windows)またはCmd+Shift+F5(Mac)を押します。それでも更新されない場合は、セルをコピーしてすぐに同じ場所に値として貼り直す方法も効果的です。

アクセス制限やログインが必要なページは取得できない

IMPORTHTMLはGoogleのサーバーが直接Webページを取得するため、認証が必要なページやロボット排除ファイル(robots.txt)で制限されているページからはデータを取得できません。その場合は、手動でダウンロードしたCSVをインポートするなど別の方法を検討してください。

ADVERTISEMENT

IMPORTHTMLと似た関数の比較

関数名 取得できるデータ 主な用途
IMPORTHTML HTMLのテーブル(<table>)またはリスト(<ul>/<ol>) 新聞のランキング表や価格比較表など、表形式のデータ
IMPORTXML XPathで指定した任意の要素 特定のテキストや属性値の抽出に最適
IMPORTDATA CSVやTSVなど区切り文字形式のファイル 構造化されたテキストデータをそのまま取り込み

IMPORTHTMLはテーブルやリストの構造を自動認識するため、手軽に使える点がメリットです。一方、IMPORTXMLはXPathを自分で指定する必要がありますが、より柔軟な抽出が可能です。目的に応じて使い分けるとよいでしょう。

まとめ

本記事ではIMPORTHTMLを使ってWeb上の表をスプレッドシートに取り込み、定期的に自動更新する方法を解説しました。基本構文を覚えれば、株価や気温データなどを手動更新の手間なく管理できます。また、Apps Scriptを組み合わせることで更新間隔を自由にカスタマイズできることもお分かりいただけたと思います。今後はIMPORTXMLやIMPORTDATAにも挑戦して、Webデータの活用範囲を広げてみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。