ウェブサイトに掲載されている表やリストのデータを、毎回手作業でコピー&ペーストしていませんか。特に更新頻度の高い価格表や統計情報をスプレッドシートで管理したい場合、手動では手間がかかりミスも起こりやすいものです。そんなときに役立つのがIMPORTHTML関数です。この関数を使えば、外部サイトのテーブルやリストを自動でスプレッドシートに取り込めます。本記事ではIMPORTHTMLの基本的な使い方から注意点まで、具体例を交えて解説します。
【要点】IMPORTHTMLで外部サイトの表やリストを自動取得する方法
- =IMPORTHTML(URL, “table”, n) の基本構文: 指定したURLのn番目のテーブルを取得します。モードには “table” と “list” の2種類があります。
- モード “list” でリストを取得: サイト内の順序付きリストや順序なしリストを取得できます。適用例として箇条書きのデータをシートに展開できます。
- 更新は手動またはトリガーで: 関数の結果はシートを開くたびに再計算されますが、動的に更新するにはトリガー設定が必要です。
ADVERTISEMENT
目次
IMPORTHTMLがWebデータを自動取得する仕組み
IMPORTHTMLは指定したURLのHTMLソースを解析し、tableタグやul/olタグに該当する要素を抽出する関数です。関数の構文は =IMPORTHTML(URL, モード, インデックス) で、モードには「table」(テーブル)か「list」(リスト)を指定します。インデックスはページ内に複数の対象要素がある場合に、何番目の要素を取得するかを1から始まる数値で指定します。たとえば =IMPORTHTML("https://example.com", "table", 1) とすれば1番目のテーブルを取得できます。この関数は静的HTMLのページにのみ対応しており、JavaScriptで動的に生成されたコンテンツは取得できません。取得したデータはスプレッドシートのセルに展開され、以降は通常のデータと同じように加工したりグラフにしたりできます。
IMPORTHTMLの実践的な使い方と手順
テーブルを取得する基本手順
- スプレッドシートを開き、データを表示したいセルを選択します
通常はセルA1を選択します。結果は複数行・複数列にわたって展開されるため、周囲に他のデータがないことを確認しておくと安全です。 - IMPORTHTML関数を入力します
たとえば=IMPORTHTML("https://www.example.com/data", "table", 1)と入力します。URLはダブルクォーテーションで囲み、モードは “table” と指定します。カンマで区切ってインデックスには1を指定すると、ページ内の最初のテーブルが取得されます。 - Enterキーを押して実行します
シートに読み込み中と表示され、数秒から数十秒でデータが展開されます。初回の読み込みには時間がかかる場合がありますが、そのまま待機してください。 - 取得結果を確認します
テーブルのヘッダー行を含むすべての行と列がセルに展開されます。もし意図したデータと異なる場合は、インデックス番号を変更して別のテーブルを試します。
リストを取得する手順
リストモードでは、ul(順序なしリスト)やol(順序付きリスト)の内容を取得できます。たとえばサイトの「お知らせ一覧」のような箇条書きデータを一列に並べたい場合に便利です。手順はテーブル取得とほぼ同じで、モードを “list” に変更します。
- リストを表示したいセルを選択します
通常はA1セルを選びます。 - 関数を入力します
例:=IMPORTHTML("https://www.example.com/news", "list", 1)と入力します。モードを “list” に、インデックスは1とします。 - Enterキーを押して実行します
リストの各項目が縦一列に展開されます。各項目はそれぞれセルに格納されます。
複数のテーブルを同時に取得する方法
同じページ内に複数のテーブルやリストがある場合、それぞれ別のセルでIMPORTHTML関数を使い、インデックスを変えることで取得できます。たとえば1番目のテーブルは =IMPORTHTML(URL, "table", 1)、2番目のテーブルは =IMPORTHTML(URL, "table", 2) と指定します。以下の例では、セルA1に1番目のテーブル、セルE1に2番目のテーブルを表示するよう設定しています。
実践例:=IMPORTHTML("https://www.example.com/prices", "table", 1) で価格表を取得し、同じシートの別の場所で =IMPORTHTML("https://www.example.com/prices", "table", 2) で別の表を取得できます。
IMPORTHTML使用時のよくある注意点と失敗パターン
動的コンテンツは取得できない
IMPORTHTMLはHTMLソースを直接解析するため、JavaScriptで動的に生成されたテーブルやリストは取得できません。そのようなサイトでは要素が見つからず、空の結果やエラーが返ります。代替案として、サイトがAPIを提供していればIMPORTDATAやApps Scriptを利用する方法があります。
アクセス制限や認証が必要なサイト
IMPORTHTMLがアクセスできるのは、Googleのサーバーから一般公開されたURLだけです。ログインが必要なページや、特定のRefererを要求するサイトは取得できません。また、サイト側がスクレイピングを禁止している場合もエラーになることがあります。
インデックスが間違っていると意図しないデータを取得する
ページ内に複数のテーブルやリストがある場合、インデックスを間違えると別の要素を取得してしまいます。まずはインデックス1から順に試し、結果を確認しながら適切な数値を見つけてください。エラーが返る場合は、そもそも対象ページにテーブルやリストが存在しない可能性があります。
更新タイミングと再計算
IMPORTHTMLの結果は、スプレッドシートを開いたときや関数内の参照が変わったときに再計算されます。しかし、元のWebページが更新されても自動的には再取得されません。最新データを取得したい場合は、手動でシートを再読み込みするか、Google Apps Scriptのタイマートリガーを使って定期的に関数を再計算する方法があります。
ADVERTISEMENT
IMPORTHTMLと他のIMPORT系関数の比較
| 関数名 | 主な用途 | 取得するデータ | 注意点 |
|---|---|---|---|
| IMPORTHTML | Webページのテーブルやリスト | 表形式、箇条書き | 静的HTMLのみ。動的コンテンツ不可 |
| IMPORTDATA | CSVやTSVファイルの読み込み | カンマ区切りテキスト | URLが直接CSVファイルを指す必要あり |
| IMPORTRANGE | 別のスプレッドシートからのデータ取得 | セル範囲 | アクセス権限の設定が必要 |
| IMPORTXML | XPathで指定した要素を取得 | 任意のHTML要素や属性 | XPathの知識が必要。複雑な抽出に強い |
まとめ
IMPORTHTML関数を使うことで、外部サイトのテーブルやリストをスプレッドシートに自動で取り込めるようになります。静的HTMLのページであれば、コピペ作業から解放され更新も容易です。複数のテーブルがある場合もインデックスを変えて取得できます。ただし、動的コンテンツやアクセス制限のあるサイトには対応していないため、その場合はIMPORTXMLやApps Scriptなど別の方法を検討しましょう。まずは普段よく見るWebページの表をIMPORTHTMLで試してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】複合グラフで棒と折れ線を同時表示!2軸グラフの作り方
- 【Googleスプレッドシート】FILTER関数で条件に合う行だけ抽出!数式1つで動的な絞り込み
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】重複データを抽出して表示!COUNTIFと条件付き書式の併用
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】ARRAYFORMULAで列全体に数式を一括適用!セル分の入力を不要に
- 【Googleスプレッドシート】データ範囲を動的に伸縮させる!INDIRECTと参照範囲のコツ
- 【Googleスプレッドシート】共有解除と権限の取り消し!アクセスを完全に閉じる手順
