Webサイトの統計表を毎回手動でコピー&ペーストしていませんか。データが頻繁に更新されるサイトの場合、手作業では追いつかず、最新の情報を反映できないことも多いでしょう。GoogleスプレッドシートのIMPORTHTML関数を使えば、Webページ上のテーブルを直接スプレッドシートに取り込めます。さらに一定間隔で自動更新する設定を組み合わせれば、常に最新の統計表を利用できるようになります。この記事ではIMPORTHTMLの基本構文から、定期的な自動更新の仕組みまでを詳しく解説します。
【要点】IMPORTHTMLでWeb統計表を自動取得・定期更新する方法
- =IMPORTHTML(URL, “table”, インデックス): 指定したURLのテーブルを番号指定で取得します。2回目以降の読み込みはGoogleのキャッシュを利用するため、最新データを保つには対策が必要です。
- Apps Scriptのタイマートリガー: スプレッドシートの関数だけでは更新タイミングを制御できません。Google Apps Scriptのトリガーを使って定期的にシートを再計算させることで、IMPORTHTMLの結果を更新できます。
- 読み込みエラーの対処: Webページの構造変更やアクセス制限により#N/Aや#REF!が発生する場合があります。エラー原因の特定と代替手段を知っておくと安心です。
ADVERTISEMENT
目次
IMPORTHTMLがWebテーブルを取得する仕組み
IMPORTHTML関数は、指定したURLのHTMLソースから<table>タグで囲まれた部分を探し、スプレッドシートのセルに展開します。引数として「URL」「取得する要素の種類(“table”または”list”)」「インデックス(何番目のテーブルか)」を指定します。Googleのサーバー側で定期的にHTMLを再取得するため、関数を再計算しない限りデータは更新されません。デフォルトの再計算頻度は約1時間に1回程度ですが、保証されてはいません。そこで、確実に定期更新するには別の仕組みが必要になります。
IMPORTHTMLで統計表を定期アップデートする手順
ここでは、実際にWebサイトの統計表をスプレッドシートに取り込み、Apps Scriptを使って毎日自動更新する方法を解説します。使用するサンプルサイトとして、架空のアクセス解析ページを想定します。
1. IMPORTHTML関数でテーブルを取得する
- 取り込みたいWebページのURLを確認する
ブラウザで統計表が表示されているページを開き、アドレスバーからURLをコピーします。ページ内に複数のテーブルがある場合は、取り込みたいテーブルが何番目かを把握しておきます。 - スプレッドシートに関数を入力する
任意のセルに以下のように入力します。URLはダブルクォーテーションで囲みます。
=IMPORTHTML("https://example.com/stats", "table", 1)
インデックスは1から始まる番号で、1が最初のテーブルです。 - 結果を確認する
関数が正しく動作すれば、テーブルのヘッダーとデータがスプレッドシートに表示されます。もしエラーが出た場合は、URLの正しさやテーブルの存在を確認してください。
2. Apps Scriptで定期更新のトリガーを設定する
- スクリプトエディタを開く
スプレッドシートのメニューから「拡張機能」→「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。 - 関数を作成する
デフォルトのコードを削除し、以下の関数を貼り付けます。この関数は現在のシートの全セルを再計算します。function refreshSheet() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var range = sheet.getDataRange(); range.setValue(range.getDisplayValues()); }注意: この方法は値を上書きしてしまうため、IMPORTHTMLの結果を他のセルで参照している場合は注意が必要です。
- トリガーを設定する
スクリプトエディタの左側の時計アイコン(トリガー)をクリックし、「トリガーを追加」を選択します。実行する関数に「refreshSheet」、イベントのソースを「時間主導型」、時間の間隔を「1日おき」など好みの頻度に設定します。保存時に権限の承認を求められるので、Googleアカウントで許可します。
IMPORTHTML定期更新で注意すべきポイント
データが更新されない・古いままの場合
IMPORTHTMLはGoogleのキャッシュに依存するため、関数を再計算してもすぐに最新データにならないことがあります。キャッシュのクリアはできませんが、URLにダミーのクエリパラメータ(例: ?t=123)を追加して強制的に再取得させる方法も効果的です。ただし、スクリプトで定期的に再計算するだけではキャッシュが残る可能性があるため、更新頻度は1日1回程度に抑えることをおすすめします。
#N/Aエラーが発生する場合
Webページの構造変更やアクセス権限の不足が原因です。まずはブラウザで直接URLを開き、テーブルが表示されるか確認します。ページがパスワード保護されている場合や、JavaScriptで動的に生成されているテーブルはIMPORTHTMLで取得できません。その場合はIMPORTXMLやGoogle Apps ScriptのUrlFetchAppを使う方法も検討してください。
テーブルのインデックスがずれる問題
Webサイトのリニューアルなどでテーブルの順番が変わると、正しいデータが取得できなくなります。関数のインデックスを確認し、必要に応じて調整します。また、インデックスを固定せず、テーブルの見出しなどで動的に特定する方法も考えられますが、IMPORTHTMLでは難しいため、定期的な動作確認が欠かせません。
ADVERTISEMENT
IMPORTHTMLと他のインポート関数の比較
| 関数名 | 取得できるデータ | 更新のしやすさ | 主な用途 |
|---|---|---|---|
| IMPORTHTML | HTMLテーブル・リスト | 手動再計算またはタイマートリガーが必要 | Web上の統計表、ランキング一覧 |
| IMPORTXML | XPathで指定した任意の要素 | 手動再計算またはタイマートリガーが必要 | メタデータ、特定のテキスト抽出 |
| IMPORTRANGE | 別のスプレッドシートのセル範囲 | 自動でリアルタイム更新に近い | シート間のデータ連携 |
まとめ
IMPORTHTML関数を使えば、Webサイトの統計表をワンクリックでスプレッドシートに取り込めるようになります。ただし、データの鮮度を保つためにはApps Scriptのトリガーを併用し、定期的にシートを再計算する仕組みが必要です。また、Webページの構造変化に備えてエラー時の対処法を覚えておくと安心です。応用として、複数のテーブルを一度に取得したり、QUERY関数と組み合わせて必要な列だけ抽出する方法も試してみるとよいでしょう。ぜひ、日々のデータ収集に役立ててください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
