「ExcelのセルにURLを書いたら、そのままWebの情報を引っ張ってこれないかな?」
為替レートや天気情報、RSSフィードなど、Webにある情報をExcelに取り込みたい場面ってありますよね。毎回コピペするのは面倒ですし、自動更新されれば作業がかなり楽になります。
ExcelのWEBSERVICE関数を使えば、URLを指定するだけでWebサービスからデータを取得できますよ。FILTERXML関数と組み合わせれば、欲しい項目だけをスマートに抜き出すこともできます。
この記事では、ExcelのWEBSERVICE関数の基本構文から、FILTERXML・ENCODEURLとの連携、現状の「廃止扱い」の注意点、Power Queryなど代替手段までを丁寧に解説します。
対象環境: Excel 2013以降のデスクトップ版(Windows/Mac)。Excel for the web・Excel Mobile では利用できません。また、2019年12月以降のMicrosoft 365では新規ファイルでの利用が廃止扱いになっています(後述)。
ExcelのWEBSERVICE関数とは?Webからデータを取得するWeb関数
ExcelのWEBSERVICE関数は、指定したURLにアクセスしてその応答データをセルに返してくれるWeb関数です。Excel 2013で追加されました。
「わざわざブラウザでページを開いてコピペする」という手間を、関数ひとつで自動化できる便利な関数ですよ。
WEBSERVICE関数の読み方と位置づけ
WEBSERVICEは「ウェブサービス」と読みます。英語名そのままです。
ExcelにはWeb関連の関数が3つあります。この3つはセットで使うのが基本ですよ。
| 関数 | 役割 |
|---|---|
| ENCODEURL | URLに含める文字列をエンコードする |
| WEBSERVICE | URLにアクセスしてデータを取得する |
| FILTERXML | 取得したXMLデータから必要な要素を抜き出す |
単独で使うよりも、組み合わせて使うと本領を発揮します。
WEBSERVICE関数でできること
WEBSERVICE関数を使うと、次のようなことができます。
- Web APIからJSONやXMLデータを取得する
- RSSフィードを取り込んで最新記事の一覧を作る
- 為替レートや株価などの外部データを自動取得する
- 郵便番号検索APIで住所を自動入力する
- 天気予報APIで1週間の天気をExcelに表示する
要するに、「URLで取得できるデータはExcelに引き込める」という便利な関数なんです。
対応バージョンと利用制限
ここは重要なポイントなので、しっかり押さえてくださいね。
| 環境 | 利用可否 |
|---|---|
| Excel 2013〜2021(Windows/Mac デスクトップ版) | 利用可能 |
| Microsoft 365(Windows デスクトップ版) | 廃止扱い(既存ファイルのみ動作) |
| Excel for the web(ブラウザ版) | 利用不可 |
| Excel Mobile(iOS/Android) | 利用不可 |
Microsoft 365では、2019年12月以降の新規ファイルではWEBSERVICE関数が利用できません。これは「deprecated(廃止扱い)」というステータスで、古いファイルでは引き続き動作するものの、新規入力はブロックされるという扱いです。
セキュリティ上の懸念と、Power Queryなどより高機能な代替手段が登場したことが廃止の背景ですよ。代替手段については記事後半で紹介しますね。
ExcelのWEBSERVICE関数の書式と引数
基本構文
=WEBSERVICE(URL)
カッコの中に、アクセスしたいURLを文字列として指定します。非常にシンプルな構文ですね。
引数の意味
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| URL | 必須 | アクセス先のURL。HTTPまたはHTTPSのみ対応。最大32,767文字まで |
引数はURLひとつだけなので、とても覚えやすい関数です。
戻り値
戻り値は、指定したURLにアクセスして取得した生の文字列データです。XML形式、JSON形式、プレーンテキストなど、サーバーが返す内容がそのまま返ってきます。
戻り値の文字列の長さは最大32,767文字までです。セルの表示上限と同じですね。これを超えるデータは切り捨てられるので、大量データの取得には向いていません。
対応プロトコル
HTTPまたはHTTPSのみ対応しています。FTPやSMTP、ファイルパス(file://)は使えません。
また、サーバー側でCookie認証や複雑な認証ヘッダーを要求するAPIには対応していません。認証不要の公開APIを使うのが基本ですよ。
ExcelのWEBSERVICE関数の基本的な使い方
まずはシンプルな例で動きを確認してみましょう。
RSSフィードを取得する
試しにRSSフィードのURLを指定してみます。A1セルに次の数式を入力します。
=WEBSERVICE("https://news.yahoo.co.jp/rss/topics/top-picks.xml")
結果として、RSSフィードのXMLデータがそのまま文字列でA1セルに返ってきます。セルをダブルクリックすると、 のような長い文字列が入っているのが確認できますよ。
このままだと読みにくいので、次のFILTERXML関数で必要な部分だけを抜き出します。
セル参照でURLを指定する
URLを直接書かずに、セル参照で渡すこともできますよ。
| セル | 内容 |
|---|---|
| A1 | https://example.com/api/data.xml |
| B1 | =WEBSERVICE(A1) |
B1セルに =WEBSERVICE(A1) と入力すると、A1セルのURLにアクセスした結果が返ります。
URLを変更するだけで結果を切り替えられるので、複数のAPIを使い分ける用途に便利ですよ。
動的なURLを作る
URLの一部を変数として組み立てたいケースもあります。& で文字列を連結すれば、セル値を組み込んだURLが作れますよ。
=WEBSERVICE("https://api.example.com/weather?city=" & A1)
A1セルに「tokyo」と入れれば ?city=tokyo、「osaka」と入れれば ?city=osaka のURLにアクセスできます。
ただし日本語を含む場合は、後述のENCODEURL関数でエンコードする必要があります。半角英数字だけなら、このシンプルな連結で問題ありませんよ。
ExcelのWEBSERVICE関数の実践的な使い方・応用例
基本がわかったところで、実務で使う応用例を3つ紹介します。
FILTERXML関数と組み合わせてXMLから値を抜き出す
WEBSERVICE関数の一番メジャーな使い方が、FILTERXML関数との組み合わせです。取得したXMLから、XPathで指定した要素だけを抜き出せます。
=FILTERXML(WEBSERVICE("URL"), "XPath")
たとえばRSSフィードの最新記事タイトルを1件取得するなら、次のように書きます。
=FILTERXML(WEBSERVICE("https://news.yahoo.co.jp/rss/topics/top-picks.xml"), "//item/title")
Microsoft 365やExcel 2021以降ならスピル機能で複数行に展開されますよ。Excel 2013〜2019では配列数式として入力してください。
XPathの書き方は、ExcelのFILTERXML関数の使い方 で詳しく解説しています。
ENCODEURL関数で日本語URLをエンコードする
URLに日本語や記号を含める場合は、ENCODEURL関数でエンコードしてから渡します。
=WEBSERVICE("https://api.example.com/search?q=" & ENCODEURL(A1))
A1に「経理処理」と入れた場合、ENCODEURL関数が「%E7%B5%8C%E7%90%86%E5%87%A6%E7%90%86」に変換してくれます。これでサーバー側でも正しく受け取れますよ。
日本語を含むURLを直接 WEBSERVICE に渡すと、サーバーによっては文字化けや400エラーになることがあります。日本語が絡むときは必ず ENCODEURL を通すのがセオリーです。
詳しくは ExcelのENCODEURL関数の使い方 を参考にしてください。
為替レート取得の定番パターン
Excelで為替レートを自動取得するパターンもよく使われます。無料の為替APIを使った例です。
| セル | 内容 |
|---|---|
| A1 | USD |
| A2 | JPY |
| B1 | =FILTERXML(WEBSERVICE("https://www.floatrates.com/daily/" & LOWER(A1) & ".xml"), "//item[targetCurrency='" & A2 & "']/exchangeRate") |
これで「1USD=何JPY」の為替レートが取れますよ。
セルの値を変えれば他の通貨ペアにも対応できるので、為替計算シートのテンプレートとして使いやすいですね。
NOTE
WEBSERVICE関数は、シートを開くたびや再計算のたびにAPIへアクセスします。リクエスト頻度に制限のあるAPIでは、意図せず制限に引っかかる可能性があるので注意してくださいね。
WEBSERVICE関数が廃止扱いになった背景と現状
2019年12月以降のMicrosoft 365では、WEBSERVICE関数が廃止扱い(deprecated)になっています。ここは実務で必ず知っておきたいポイントですよ。
廃止扱いの具体的な挙動
「廃止扱い」と聞くと「もう使えないの?」と思うかもしれませんが、実際の挙動はもう少し複雑です。
| 状況 | 挙動 |
|---|---|
| 既存ファイルに書かれたWEBSERVICE関数 | そのまま動作する(計算される) |
| 新規ファイルで入力 | 関数名が認識されず #NAME? エラーになる場合がある |
| 組織ポリシーでブロック | 管理者が無効化している場合は使えない |
つまり、過去に作ったファイルは動くが、新規に作るファイルでは使えないというのが基本的な状況です。
Excel 2013〜2021(パッケージ版)やMac版では今でも普通に使えるので、Microsoft 365限定の話ですよ。
廃止された理由
Microsoftが WEBSERVICE 関数を廃止扱いにした理由は、大きく2つあります。
- セキュリティ上の懸念: 悪意のあるURLをセルに埋め込む攻撃ベクトルになりうる
- 代替手段の成熟: Power Query が標準搭載され、より安全で高機能なデータ取得が可能になった
要するに、「セキュリティリスクが高く、もっと良い代替手段があるから引退させる」という判断ですね。
実務での推奨方針
これから新しく作る業務ファイルでは、WEBSERVICE関数よりもPower Queryを使うのがおすすめです。
ただし、次のようなケースでは引き続きWEBSERVICE関数が有効ですよ。
- 過去に作った既存ファイルのメンテナンス
- Excel 2016/2019/2021のパッケージ版を使っている環境
- シンプルなRSS取得など軽い用途
- 学習目的やプロトタイピング
仕事で長期運用するシートなら、次のセクションで紹介するPower Queryへの移行を検討してくださいね。
WEBSERVICE関数の代替手段
WEBSERVICE関数の代わりとして、Excelには複数の選択肢があります。用途に応じて使い分けましょう。
Power Queryを使う方法
一番おすすめなのが Power Query(データ > データの取得)です。Microsoft 365・Excel 2016以降に標準搭載されています。
Power Queryには、次のようなメリットがありますよ。
- JSON・XML・CSV・HTMLなど多様な形式に対応
- 認証付きAPIに対応(OAuth・Basic認証など)
- 32,767文字制限なし
- データ整形(列追加・フィルタ・結合)まで一貫して処理できる
- 定期更新のスケジュール設定が可能
手順は「データ」タブ →「データの取得」→「Webから」→ URLを入力、という流れです。GUIで操作できるので、関数を書くより直感的ですよ。
データ型「株価・地理」機能を使う
Microsoft 365には「株価」「地理」というデータ型機能があります。リンクされたデータ型とも呼ばれます。
| データ型 | 取得できる情報 |
|---|---|
| 株価 | 株価、時価総額、為替レート、変化率など |
| 地理 | 人口、首都、GDP、通貨、タイムゾーンなど |
使い方は簡単で、セルに「USD/JPY」と入れて「データ > 株価」を選ぶだけ。Excelが自動でデータを引き込んできますよ。
株価や為替レートだけなら、WEBSERVICE関数よりもこちらの方が手軽で安全です。
VBAのXMLHTTPを使う方法
より高度な制御が必要なら、VBAの MSXML2.XMLHTTP を使う方法もあります。Excelのマクロから直接HTTPリクエストを投げられますよ。
Sub getApiData()
'--- 変数宣言 ---
Dim http As Object
Dim url As String
'--- 取得先URL ---
url = "https://api.example.com/data.xml"
'--- HTTPリクエスト送信 ---
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url, False
http.send
'--- 結果をセルに書き込み ---
Range("A1").Value = http.responseText
End Sub
認証ヘッダーの追加や、POSTリクエストの送信、長大なレスポンスの処理など、WEBSERVICE関数ではできない処理が可能ですよ。
ただしVBAはマクロ有効ブック(.xlsm)が必要で、組織によってはマクロブロックがかかっています。Power Queryが使えるならPower Queryを優先するのが無難ですね。
WEBSERVICE関数でよくあるエラーと対処法
実際にWEBSERVICE関数を使うと、エラーに遭遇することがあります。原因と対処法を表でまとめておきますね。
| エラー/症状 | 原因 | 対処法 |
|---|---|---|
| #VALUE! | URLがHTTP/HTTPS以外、または不正な形式 | httpsで始まる正しいURLを指定する |
| #VALUE! | サーバーが200以外のHTTPステータスを返した | URLをブラウザで開いて動作確認する |
| #VALUE! | タイムアウト(30秒以上応答なし) | APIの応答速度を確認する、キャッシュを検討 |
| #N/A | Excel for the web・Mobileで実行している | デスクトップ版Excelで開く |
| #NAME? | Microsoft 365で新規ファイル利用(廃止扱い) | Power Queryなど代替手段を使う |
| 文字化け | 日本語URLを直接指定している | ENCODEURL関数でエンコードする |
| 結果が切れる | 32,767文字の上限を超えている | Power QueryかVBAで取得する |
#VALUE!エラーの原因と対処
一番多いのが #VALUE! エラーです。主な原因は3つあります。
パターン1: URLの形式が不正
=WEBSERVICE("example.com/data.xml")
https:// のようなスキームが抜けていると #VALUE! になります。必ず https:// や http:// から始まるフルURLを指定してくださいね。
パターン2: サーバーが4xx・5xx応答を返した
URL自体は正しくても、サーバー側で認証エラー(401)やNotFound(404)を返すと #VALUE! が返ります。
まずはブラウザで同じURLを開き、画面が正しく表示されるかを確認しましょう。ブラウザで見られないURLはWEBSERVICE関数でも取得できません。
パターン3: タイムアウト
WEBSERVICE関数には30秒程度のタイムアウトがあります。応答の遅いサーバーではタイムアウトでエラーになりますよ。
#NAME?エラーの原因と対処
Microsoft 365で新規ファイルに入力したときに #NAME? エラーになったら、これが 廃止扱いの影響です。
=WEBSERVICE("https://example.com")
Excelが「この関数は知らない」と判断してエラーを返してきます。この場合は Power Queryを使うしかありません。
古いExcelファイル(.xls形式、2019年より前に作ったファイル)で開き直せば動く場合もありますが、基本は代替手段に移行するのがおすすめです。
文字化けや日本語URLの対処
URLに日本語や記号が含まれるとき、ENCODEURL関数を通さないと文字化けしますよ。
# 誤った書き方
=WEBSERVICE("https://api.example.com/search?q=経理処理")
# 正しい書き方
=WEBSERVICE("https://api.example.com/search?q=" & ENCODEURL("経理処理"))
ENCODEURL関数は日本語・記号・スペースなどを「%XX」形式に変換してくれます。URLに変動する値を埋め込むときは必ずENCODEURLを通すと覚えておきましょう。
WEBSERVICE・FILTERXML・ENCODEURLの3点セット連携
最後に、Web関数3点セットの定番パターンをまとめておきますね。この形をテンプレとして覚えると、応用範囲がグッと広がりますよ。
基本テンプレート
=FILTERXML(WEBSERVICE(ENCODEURL(URL)), "XPath")
処理の流れはこうです。
- ENCODEURLでURLを安全な形式にエンコード
- WEBSERVICEでエンコード済みURLにアクセスしてXMLを取得
- FILTERXMLでXPathを使って必要な要素を抜き出す
それぞれの関数の役割を分担することで、どんなWebデータでも扱える万能パターンになります。
実務での使い分け早見表
| やりたいこと | 使う関数 |
|---|---|
| URLでWebデータを丸ごと取得したい | WEBSERVICE のみ |
| 取得したXMLから一部だけ抜き出したい | WEBSERVICE + FILTERXML |
| URLに日本語・記号を含める必要がある | ENCODEURL を追加 |
| JSON形式のAPIを使いたい | Power Query(WEBSERVICEはJSON非対応) |
| 認証付きAPIを使いたい | Power Query または VBA |
| 32,767文字を超える大量データ | Power Query または VBA |
WEBSERVICE関数が得意なのは「公開されているシンプルなXML/RSSデータの取得」です。JSONや認証付きAPI、大量データはPower Queryに任せるのが賢い使い分けですよ。
まとめ|ExcelのWEBSERVICE関数は用途を見極めて使おう
ExcelのWEBSERVICE関数の使い方を、基本から応用まで一通り紹介してきました。要点をおさらいしておきますね。
- WEBSERVICE関数は URLを指定してWebからデータを取得する Web関数
- 構文は
=WEBSERVICE(URL)。引数はURL1つだけとシンプル - 戻り値は生の文字列データ。最大32,767文字まで
- HTTP/HTTPSのみ対応。FTP・認証付きAPIは不可
- Excel 2013以降のデスクトップ版で利用可能。Webブラウザ版・Mobile版は非対応
- Microsoft 365では2019年12月以降、新規ファイルでの利用が廃止扱い
- FILTERXML・ENCODEURLとセットで使うのが定番パターン
- 新規の業務ファイルでは Power Query や データ型機能 の利用が推奨
「URLでデータを取れる時代は終わりつつある」と捉えて、既存ファイルのメンテナンスではWEBSERVICE、新規ではPower Queryと使い分けるのが実務的な判断ですよ。
Web関数を使いこなせると、Excelの活用シーンがグッと広がります。下の関連記事もあわせて読んで、Excelのデータ連携スキルを高めてみてくださいね。
- ExcelのFILTERXML関数の使い方 — 取得したXMLの解析に必須
- ExcelのENCODEURL関数の使い方 — 日本語URLのエンコードに必須
- Excel関数一覧(アルファベット順) — 関数全体を俯瞰したいとき
- Excel関数 機能別リファレンス — 目的から関数を探したいとき
Webデータを自在に扱えるビジネスパーソンを目指していきましょうね。
