【無料DLあり】Excel VBAからサーバーAPIを呼び出す|気象庁の実況天気図をエクセルシートに表示してみる

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分後に発表されます。そのため、ボタンを押した瞬間の気象状況そのものではなく、その時点で公開されている最新の天気図が表示されます。

実況天気図の例(気象庁HP https://www.jma.go.jp/jma/kishou/know/kurashi/tenkizu.html より)

👉 気象庁「天気図について」

提供Excelファイルの使い方

  1. Excelファイルをダウンロードして開きます。
  2. マクロが有効な状態で、シート上の「天気図を表示」ボタンを押します。
  3. サーバー(chiba-laboのサーバー)と通信し、気象庁公開の最新の実況天気図がシートに表示されます。
  4. もう一度ボタンを押すと、前の画像を新しい画像に置き換えます。

表示に成功すると、画像の上にタイトルと出典も表示します。

マクロ(VBA)について

インターネットからダウンロードしたマクロ付きファイルは、Excelが実行をブロックすることがあります。マクロを実行する場合は、ファイルの入手元と内容を確認してください。必要な場合も、マクロ全体の保護を無効にせず、信頼できるファイルだけを対象にしてください。

サーバーとExcelの役割

今回のAPIは、次のように動いています。

  1. Excel VBAが、chiba-laboのAPIへ最新天気図をリクエストします。
  2. サーバー上のPython CGIが、気象庁の画像一覧から最新の実況天気図を探します。
  3. サーバーが画像を取得し、PNG形式でExcelへ返します。
  4. 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をサーバーへ設置する

  1. get_weather_chart.cgi を、WebからCGIとして実行できるディレクトリーへアップロードします。
  2. ファイル先頭のPython実行パスが、ご利用サーバー上のPythonの場所と一致しているか確認します。異なる場合は、先頭行をサーバーに合わせます。
  3. CGIファイルに実行権限を設定します。一般的には 755 が使われますが、サーバー会社の指定に従ってください。
  4. .cgi ファイルをCGIとして実行する設定が有効であり、サーバーから www.jma.go.jp へHTTPS接続できることを確認します。
  5. 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へ取り込んで実行する

  1. Excelで天気図を表示したいブックを開きます。
  2. Alt キーを押しながら F11 キーを押して、VBAエディターを開きます。
  3. メニューの「ファイル」から「ファイルのインポート」を選び、編集した JmaWeatherChart.bas を指定します。
  4. ブックをExcelマクロ有効ブック(.xlsm)形式で保存します。
  5. Excelに戻り、Alt キーを押しながら F8 キーを押します。
  6. DisplayLatestJmaWeatherChart を選んで「実行」を押します。

ボタンから実行する場合は、Excelの「開発」タブからフォームコントロールのボタンを配置し、DisplayLatestJmaWeatherChart を割り当てます。

画像は、アクティブなシートのA4セル付近に表示されます。同じマクロを再実行すると、前回の画像が新しいものに置き換わります。

コメント