Excelに最新の天気図を表示してみよう
Excelのシートに貼ったボタンを押すと、サーバーを通じて気象庁の最新の実況天気図を取得し、ワークシートに表示するサンプルを作りました。
仕組みは次のとおり。Excelからサーバーへリクエストを送ると、サーバーが気象庁の最新画像を取得してExcelへ返します。Excel VBAは受け取った画像をシートに貼り付ける、というものです。
Excelのボタン
↓ 画像をリクエスト(API)
chiba-laboのAPI
↓ 最新の天気図をリクエスト
気象庁
↓ PNG画像を返す
chiba-laboのAPI
↓ PNG画像を返す
Excelのシートに表示
Excelからサーバへの通信は1回です。サーバーが気象データを解析したり、天気図を描いたりする処理はありません。
まずはダウンロードして試す
Excelファイルで試す
ボタンを配置したマクロ有効ブックです。ダウンロードして開き、ボタンを押すと天気図を表示できます。
👉 Excelファイルをダウンロード
weather-chart-demoーja.zip
ZIPファイルを解凍すると、weather_chart_demo_ja.xlsm というマクロ付エクセルファイルが現れます。
ソースコードを見ながら試す
Excel VBAとPython CGIのコードを確認したい方はこちらです。ご自身のサーバーで動かす場合は、設定手順に沿ってAPIを設置してください。
👉 ソースコードと設定手順をダウンロード
weather-chart-code.zip
ZIPファイルを解凍すると、get_weather_chart.cgi、JmaWeatherChart.bas、README_ja.txtの3ファイルが現れます。詳しい説明はREADME_ja.txtをご覧ください。
どんな天気図が表示される?
今回は、気象庁が公開している「日本周辺域の実況天気図」を表示します。実況天気図には、高気圧・低気圧・前線などが示されています。
気象庁の説明によると、日本周辺域の実況天気図は1日7回発表され、観測時刻から約2時間10分後に発表されます。そのため、ボタンを押した瞬間の気象状況そのものではなく、その時点で公開されている最新の天気図が表示されます。

提供Excelファイルの使い方
- Excelファイルをダウンロードして開きます。
- マクロが有効な状態で、シート上の「天気図を表示」ボタンを押します。
- サーバー(chiba-laboのサーバー)と通信し、気象庁公開の最新の実況天気図がシートに表示されます。
- もう一度ボタンを押すと、前の画像を新しい画像に置き換えます。
表示に成功すると、画像の上にタイトルと出典も表示します。
マクロ(VBA)について
インターネットからダウンロードしたマクロ付きファイルは、Excelが実行をブロックすることがあります。マクロを実行する場合は、ファイルの入手元と内容を確認してください。必要な場合も、マクロ全体の保護を無効にせず、信頼できるファイルだけを対象にしてください。
サーバーとExcelの役割
今回のAPIは、次のように動いています。
- Excel VBAが、chiba-laboのAPIへ最新天気図をリクエストします。
- サーバー上のPython CGIが、気象庁の画像一覧から最新の実況天気図を探します。
- サーバーが画像を取得し、PNG形式でExcelへ返します。
- VBAが受け取った画像を一時ファイルに保存し、ワークシートへ貼り付けます。
ExcelからAPIへの接続先は次のURLです。
https://www.cibalabo.site/py/get_weather_chart.cgi
Excelからサーバーへ送るのは画像取得のリクエスト1回です。天気図の一覧と画像を取りに行く処理は、サーバー側で行います。
VBAの処理を少しだけ紹介
VBAでは、WindowsのHTTP通信機能を使ってAPIを呼び出します。
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.Open "GET", API_URL, False
http.Send
返ってきた画像データを一時ファイルに保存し、Excelの図形としてシートへ貼り付けています。
stream.Write http.ResponseBody
stream.SaveToFile tempPath, 2
Set picture = ws.Shapes.AddPicture( _
tempPath, 0, -1, ws.Range("A4").Left, ws.Range("A4").Top, -1, -1)

マクロ全体はダウンロード用ファイルに収録しています。
自分のサーバーで動かす
配布するExcelファイルは、chiba-laboのAPIを呼び出す設定になっています。ダウンロードして試すだけであれば、ご自身でサーバーを用意する必要はありません。
ここでは、ソースコードを使って、ご自身のサーバーにAPIを設置する手順を紹介します。サーバーがPython CGIに対応していることを、あらかじめご確認ください。
1. Python CGIをサーバーへ設置する
get_weather_chart.cgiを、WebからCGIとして実行できるディレクトリーへアップロードします。- ファイル先頭のPython実行パスが、ご利用サーバー上のPythonの場所と一致しているか確認します。異なる場合は、先頭行をサーバーに合わせます。
- CGIファイルに実行権限を設定します。一般的には
755が使われますが、サーバー会社の指定に従ってください。 .cgiファイルをCGIとして実行する設定が有効であり、サーバーからwww.jma.go.jpへHTTPS接続できることを確認します。- CGIの公開URLをブラウザーで開きます。正常に動作すると、PNG形式の天気図が表示されます。
CGIのURLは、サーバーの設定によって異なります。たとえば、次のようなURLになります。
https://example.com/cgi-bin/get_weather_chart.cgi
2. Excel VBAの接続先を設定する
JmaWeatherChart.bas をテキストエディターで開き、次の行を、ご自身のCGIの公開URLに変更します。
Private Const API_URL As String = "https://example.com/cgi-bin/get_weather_chart.cgi"
日本語のコメントやメッセージが文字化けしないよう、ファイルの文字コードはShift-JISのまま保存してください。
3. VBAをExcelへ取り込んで実行する
- Excelで天気図を表示したいブックを開きます。
Altキーを押しながらF11キーを押して、VBAエディターを開きます。- メニューの「ファイル」から「ファイルのインポート」を選び、編集した
JmaWeatherChart.basを指定します。 - ブックをExcelマクロ有効ブック(
.xlsm)形式で保存します。 - Excelに戻り、
Altキーを押しながらF8キーを押します。 DisplayLatestJmaWeatherChartを選んで「実行」を押します。
ボタンから実行する場合は、Excelの「開発」タブからフォームコントロールのボタンを配置し、DisplayLatestJmaWeatherChart を割り当てます。
画像は、アクティブなシートのA4セル付近に表示されます。同じマクロを再実行すると、前回の画像が新しいものに置き換わります。
コメント