業務において「Webサイト上のデータをExcelに取り込みたい」と感じたことはありませんか?
例えば、株価、為替、天気情報、商品価格、為替レートなど、毎日変化する情報を手動でコピー&ペーストすることを繰り返すのは非効率です。
そんなときに活躍するのが、エクセルのマクロ(VBA)です!
この記事では、エクセルマクロを使ってwebから情報を取得する方法を、初心者にもわかりやすくステップバイステップで解説します。
エクセルでWebデータを取得する2つの方法
エクセルでWeb上のデータを取り込むための方法としては、主に2つあります。
①:Power Queryを使う方法(ノーコード)
Power Queryは、エクセルの標準機能として利用できる便利なツールです。
「データ」タブ→「Webから」→URLを入力することで、HTMLテーブルなどを読み込むことができます。

ただし、ログインが必要なページやJavaScriptで生成されるデータには非対応なケースが多く、限界もあります。
②:VBA(マクロ)を使う方法(コードが必要だが柔軟性が高い)
VBAを使えば、ログイン処理やボタン操作を含めた自動処理も可能です。
コードを書く必要はありますが、柔軟性が非常に高いのでご自身の実現したいことに合ったツールにすることができます。
また、マクロは最近ではChat GPTなどの生成AIを使えば、とっても簡単に作成することができます。
VBA(マクロ)でWebからデータを取得する仕組み
VBAでWebサイトからデータを取得するには、例えば以下の2つの方式があります。
XMLHTTPを使う(軽量・高速)
Dim http As Object
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://example.com", False
http.Send
MsgBox http.responseText
主にAPIや静的なHTMLデータの取得に向いています。ブラウザ操作は不要なため、処理が速いのが特徴です。
Seleniumを使う(操作が視覚的)
Seleniumを使うと、ブラウザを操作するような形でWebページにアクセスできます。
ボタンをクリックしたり、ログイン操作をすることも可能です。
実際に操作されているところを見ることができるので分かりやすいですが、Seleniumのインストールや設定が必要となります。細めにアップデート
【実践】マクロでWebからデータを取得するサンプルコード
ここでは、実際にWebページからデータを取得してExcelに表示するマクロの例を紹介します。
例:為替レートを取得してセルに表示
Sub GetUSDJPY_Fixed()
Dim http As Object
Dim json As String
Dim startPos As Long, endPos As Long
Dim rate As String
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://open.er-api.com/v6/latest/USD", False
http.Send
json = http.responseText
startPos = InStr(json, """JPY"":") + 6
endPos = InStr(startPos, json, ",")
rate = Mid(json, startPos, endPos - startPos)
Range("A1").Value = "USD/JPY 為替レート"
Range("B1").Value = rate
End Sub
このように、目的のHTML要素(タグ)を文字列として抽出することで、Webから必要な値を取得することができます。

まとめ:Webデータ取得の自動化で業務時間を短縮しよう
マクロを使ってwebデータからデータを取得する技術を身につけると、毎日の単純作業を自動化できるだけでなく、タイムリーな情報に基づいた業務判断が可能になります。
例えば、
- 株価情報の自動取得とグラフ化
- 天気予報を取得して作業スケジュールに反映
- ECサイトの価格調査ツールとして活用
- 社内Webシステムからのデータ取り込み
といったことを実現するとができます。