VBAを使うと、HTTPリクエストからWebAPIを使って天気予報の情報を取得できます。
ここでは取得した天気予報の情報をJSONパースしてエクセルに出力します。
JSONパースすると、すっきりと短いコードで情報を取得することができます。
・取得した天気情報をJSON Parse(パース)で処理してエクセルへ出力
・VBAプログラム入りのエクセルをダウンロード可能
それでは以下で詳しく紹介していきます。
目次
- 1 VBAで天気情報を取得するプログラム
- 2 取り扱うウェブデータ(気象庁の天気予報の情報)とは
- 3 VBA入りのエクセルファイルをダウンロード
- 4 VBA作成前の準備
- 5 VBAのプログラムソース解説
- 5.1 プログラム0|変数宣言の指定
- 5.2 プログラム1|プログラム開始
- 5.3 プログラム2|シート設定
- 5.4 プログラム3|URL設定
- 5.5 プログラム4|HTTPリクエスト設定
- 5.6 プログラム5|HTTPリクエストの読み込み完了を待つ
- 5.7 プログラム6|リクエストに対してサーバーからテキストがなければプログラム終了
- 5.8 プログラム7|リクエストで取得したテキストをJSONパース
- 5.9 プログラム8|変数設定
- 5.10 プログラム9|gyoを1とする
- 5.11 プログラム10|JSONパースした値を確認
- 5.12 プログラム11|エクセルに出力
- 5.13 プログラム12|オブジェクト解放
- 5.14 プログラム13|プログラム終了
- 6 応用|天気情報をOutlookやchatツールで通知
- 7 Excel VBAについて詳しく理解したいなら
VBAで天気情報を取得するプログラム
VBAでウェブ情報を取得して、天気予報データをエクセルに出力します。
このプログラムの使用手順は以下のとおりです。
手順1. VBA-JSONをダウンロード
手順2. VBAプログラムを実行
手順1. VBA-JSONをダウンロード
このページではGithubで公開されているVBA-JSONをインポートして活用します。
使用方法は以下の通りです。
手順1-1. VBA-JSONにアクセス
手順1-2. Source code(zip)をダウンロード
手順1-3. JsonConverter.basをVBEのプロジェクトエクスプローラーにドラッグアンドドロップ
以下で手順を解説します。
手順1-1. VBA-JSONにアクセス
こちら(https://github.com/VBA-tools/VBA-JSON)にアクセスします。
クリックすると、以下のGithubが表示されます。
上記のページを下にスクロールしていきます。
そして「latest release」をクリックします。
手順1-2. Source code(zip)をダウンロード
Source code(zip)をダウンロードします。
ダウンロードしたzipファイルを展開します。
展開すると以下のようなフォルダが表示されます。
上記のフォルダをクリックすると、その下位フォルダに以下のようなファイルが保管されています。
手順1-3. JsonConverter.basをVBEのプロジェクトエクスプローラーにドラッグアンドドロップ
以下の「JsonConverter.bas」を選択します。
この「JsonConverter.bas」を該当のエクセルのVBEのプロジェクトエクスプローラーにドラッグアンドドロップします。
そうすると、以下のように標準モジュールにJsonConverterが表示されます。
これでVBA-JSONの準備は完了です。
手順2. VBAプログラムを実行
VBAプログラムを実行すると、エクセルに天気情報を出力します。
そうすると、以下のようなデータが自動で書き出されます。
ボタンにVBAプログラムを登録
上記の画像では、VBAプログラムをボタンに登録しています。
ボタンにVBAプログラムを登録することで、ボタンを押下しプログラムを実行することができます。
ボタンをVBAプログラムを設定したい場合は、以下で動画も交えて設定方法を紹介しているので、そちらをご覧ください。
取り扱うウェブデータ(気象庁の天気予報の情報)とは
今回は、以下のウェブページの情報を取得します。
・https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json
上記のページで、東京地方の今日・明日・明後日の天気予報を取得することができます。
上記のウェブ情報は、JSONデータと呼ばれるデータ構造になっています。
JSONとは? WebAPIで取得できるデータはJSON型が多い
JSONとは「JavaScript Object Notation」の略で、「JavaScriptのオブジェクトの書き方を元にしたデータ定義方法」のことです。
JavaScriptでオブジェクトを作成する際は {} や [] などの括弧を使って記述しますが、JSONはその記法を元にしています。
そもそもJavaScriptで使われる想定で作成されたデータ構造なので、JavaScriptと非常に相性が良いです。
WebAPIで取得できるデータの多くはJSONとして受け渡しが行わることが多いです。
今回取得するJSONデータの詳細説明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
[{ "publishingOffice":"気象庁", "reportDatetime":"2021-06-13T11:00:00+09:00", "timeSeries": [{ "timeDefines":["2021-06-13T11:00:00+09:00","2021-06-14T00:00:00+09:00","2021-06-15T00:00:00+09:00"], "areas": [{ "area":{ "name":"東京地方", "code":"130010"}, "weatherCodes":["200","203","202"], "weathers":["くもり 所により 昼過ぎ から 雨 で 雷を伴う","くもり 時々 雨 所により 雷 を伴う","くもり 一時 雨"], "winds":["南の風 23区西部 では 南の風 やや強く","南の風","東の風"], "waves":["0.5メートル 後 1メートル","0.5メートル","0.5メートル"]}, { "area":{ "name":"伊豆諸島北部", "code":"130020"}, "weatherCodes":["200","203","202"], "weathers":["くもり 所により 昼過ぎ から 雨","くもり 昼過ぎ まで 時々 雨 所により 雷 を伴う","くもり 一時 雨"], "winds":["南西の風","南西の風 後 南の風","北東の風 後 東の風"], "waves":["1.5メートル","1.5メートル","1.5メートル"]}, { "area":{ "name":"伊豆諸島南部", "code":"130030"}, "weatherCodes":["200","203","202"], "weathers":["くもり 所により 昼過ぎ から 雨","くもり 昼過ぎ まで 時々 雨 三宅島 では 雷 を伴う","くもり 一時 雨"], "winds":["南東の風","南東の風 後 東の風 やや強く","東の風 やや強く"], "waves":["1.5メートル","1.5メートル 後 2メートル ただし 三宅島 では 1.5メートル","2メートル 後 2.5メートル ただし 三宅島 では 1.5メートル 後 2メートル"]}, { "area":{ "name":"小笠原諸島", "code":"130040"}, "weatherCodes":["111","203","302"], "weathers":["晴れ 夜 くもり","くもり 昼前 から 夕方 雨 所により 雷 を伴う","雨 時々 くもり"], "winds":["南東の風 後 南の風","南の風 やや強く 後 西の風","南西の風"], "waves":["1.5メートル","1.5メートル","1.5メートル"]} ]}, 以下略 }] |
上記の情報を取得し、エクセルに出力します。
なお上記のデータはウェブ情報のままだとみにくいので、改行を加えており、かつ長いので、省略しています。
VBA入りのエクセルファイルをダウンロード
以下で紹介しているVBAプログラムをそのまま使いたい人は、以下のフォームからダウンロードできます。
登録したメールアドレスへVBA入りのファイルを送信します。
本プログラムの内容をそのまま使用可能です。ぜひお仕事にお役立てください。
なおダウンロードできるエクセルファイルには、VBA-JSONの「JsonConverter」は含まれていませんので、各自でダウンロードし、VBEに追加をお願いします。
VBA作成前の準備
ExcelでVBAを使うためにはいくつかの準備が必要です。
具体的には以下です。
準備2. 「Microsoft XML v6.0」の参照設定を変更
準備3. 「Microsoft Scripting Runtime」の参照設定を変更
上記に関して、以下で説明します。
準備1. ExcelでVBAを使うための事前準備
エクセルVBAを使うためには、保存ファイルの拡張子変更、Excelの基本設定変更の2つをしておきます。
2つともで難しい作業はなく、それぞれ1分もあれば設定変更可能です。
上記に関しては、以下の記事で解説をしています。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
準備2. 「Microsoft XML v6.0」の参照設定を変更
エクセルVBAでウェブ情報を取得するために、VBAの設定を変更しておく必要があります。
参照設定を変更することで、HTTPリクエスト通信可能になります。
参照設定の変更手順は以下のとおりです。
手順2. 「参照設定」を選択
手順3. 「Microsoft XML v6.0」にチェックを入れる
手順4. OKをクリック
手順を以下で説明します。
上記の設定をしていないと、本事例で紹介しているプログラムは動作しません。必ずチェックを入れるようにします。
準備3. 「Microsoft Scripting Runtime」の参照設定を変更
ここで使用するVBA-JSONを使用するためには、「Microsoft Scripting Runtime」の参照設定を変更しておく必要があります。
設定については、以下で説明しています。
それでは、以下でプログラムについて詳細を説明します。
VBAのプログラムソース解説
今回紹介するプログラムの概要は以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
'プログラム0|変数設定の指定 Option Explicit 'プログラム1|プログラム開始 Sub GetWeatherInfoWithJSON() 'プログラム2|シート設定 Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") 'プログラム3|URL設定 Dim url As String url = "https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json" 'プログラム4|HTTPリクエストでデータ取得 Dim objHTTP As XMLHTTP60 Set objHTTP = New XMLHTTP60 With objHTTP .Open "GET", url .send End With 'プログラム5|HTTPリクエストの読み込み完了を待つ Do While objHTTP.readyState < 4 DoEvents Loop 'プログラム6|リクエストに対してサーバーからテキストがなければプログラム終了 If objHTTP.responseText = "" Then Exit Sub End If 'プログラム7|リクエストで取得したテキストをJSONパース Dim jsonObj As Object Set jsonObj = JsonConverter.ParseJson(objHTTP.responseText) Debug.Print jsonObj(1)("publishingOffice") Debug.Print jsonObj(1)("reportDatetime") 'プログラム8|変数設定 Dim i As Long, k As Long, gyo As Long 'プログラム9|gyoの初期値を1とする gyo = 1 'プログラム10|JSONパースした値を確認 For i = 1 To 4 Debug.Print "i:" & i & "-1", jsonObj(1)("timeSeries")(1)("areas")(i)("area")("name") Debug.Print "-------------" For k = 1 To 3 Debug.Print "k:" & k & "-2", jsonObj(1)("timeSeries")(1)("timeDefines")(k) Debug.Print "k:" & k & "-3", jsonObj(1)("timeSeries")(1)("areas")(i)("weathers")(k) Debug.Print "k:" & k & "-4", jsonObj(1)("timeSeries")(1)("areas")(i)("winds")(k) Debug.Print "k:" & k & "-5", jsonObj(1)("timeSeries")(1)("areas")(i)("waves")(k) Next Next 'プログラム11|エクセルに出力 With ws.Range("A1") For i = 1 To 4 .Offset(gyo, 0).value = jsonObj(1)("timeSeries")(1)("areas")(i)("area")("name") For k = 1 To 3 .Offset(gyo, 1).value = jsonObj(1)("timeSeries")(1)("timeDefines")(k) .Offset(gyo, 2).value = jsonObj(1)("timeSeries")(1)("areas")(i)("weathers")(k) .Offset(gyo, 3).value = jsonObj(1)("timeSeries")(1)("areas")(i)("winds")(k) .Offset(gyo, 4).value = jsonObj(1)("timeSeries")(1)("areas")(i)("waves")(k) gyo = gyo + 1 Next Next End With 'プログラム12|オブジェクト解放 Set objHTTP = Nothing 'プログラム13|プログラム終了 End Sub |
それでは、以下でプログラムを詳しく説明していきます。
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
また変数については、以下のページで紹介しています。
プログラム1|プログラム開始
1 |
Sub GetWeatherInfoWithJSON() |
「Sub GetWeatherInfoWithJSON()」のプログラムを開始することを意味します。
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
プロシージャに関連するmoduleの話については以下で説明しています。
プログラム2|シート設定
1 2 |
Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") |
「Sheet1」をwsとして設定します。
なお「ThisWorkbook」を付けることで、VBAプログラムが含まれるエクセルファイルの「Sheet1」を細かく指定しています。
プログラム3|URL設定
1 2 |
Dim url As String url = "https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json" |
String型で指定した変数urlに天気予報のjsonデータを保有しているウェブリンクを取得します。
ここで指定したウェブリンクは以下です。
上記の情報をJSONとして取得して、必要な情報をエクセルに出力していきます。
プログラム4|HTTPリクエスト設定
1 2 3 4 5 6 |
Dim objHTTP As XMLHTTP60 Set objHTTP = New XMLHTTP60 With objHTTP .Open "GET", url .send End With |
HTTPリクエストを行うためのオブジェクトを作成します。
上記のプログラムは参照設定を実施していないとエラー表示されるので、事前準備の項のとおり参照設定を変更しておきます。
GETメソッドを使って、ウェブページの情報を取得します。
プログラム4~プログラム6までの「HTTPリクエストからレスポンステキスト取得」については、以下のページと同じです。
そのためここでは説明を省略します。
プログラム5|HTTPリクエストの読み込み完了を待つ
1 2 3 |
Do While objHTTP.readyState < 4 DoEvents Loop |
HTTPリクエストを送ると、取得までに時間がかかります。
それを無視してプログラムを実行すると、ウェブ情報を取得できないまま先に進めてしまうことになります。
そうすると、処理がうまくいかず、エラーが出てしまいます。
そこで、HTTPリクエストが4(読み込み完了)になるまで待ちます。
プログラム6|リクエストに対してサーバーからテキストがなければプログラム終了
1 2 3 |
If objHTTP.responseText = "" Then Exit Sub End If |
プログラム4で取得したHTTPリクエストで返ってきた値(レスポンステキスト)があるかどうかをチェックします。
もしテキストが存在しなければ、プログラムを強制終了させます。
プログラム7|リクエストで取得したテキストをJSONパース
1 2 |
Dim jsonObj As Object Set jsonObj = JsonConverter.ParseJson(objHTTP.responseText) |
VBA-JSON(外部ソース)からインストールしたJsonConverter.ParseJsonを使って、objHTTP.responseTextをJSON Parseします。
これによりwebから取得したデータをJSONとして処理することができるようになります。
JSONパースする値を確認してみます。
1 2 3 4 5 6 |
[{ "publishingOffice":"気象庁", "reportDatetime":"2021-06-13T11:00:00+09:00", "timeSeries": [{ 以下略 |
JSONパースして取得するテキストが長いので、冒頭部分のみを表示しています。
上記のデータから、「気象庁」と「2021-06-13T11:00:00+09:00」を取得するには、jsonObjを使って以下のように記述します。
Debug.Printでの検証結果
1 2 3 4 5 6 7 8 |
Dim jsonObj As Object Set jsonObj = JsonConverter.ParseJson(objHTTP.responseText) Debug.Print jsonObj(1)("publishingOffice") Debug.Print jsonObj(1)("reportDatetime") >>>気象庁 >>>2021-06-13T17:00:00+09:00 |
「気象庁」はjsonObjの1番目の要素の”publishingOffice”をキーにした値として取得できます。
「2021-06-13T11:00:00+09:00」はjsonObjの1番目の要素の”reportDatetime”をキーにした値として取得できます。
JSONパースするときのコツ
「[」で囲まれた値を取得するとき、要素番号になり、「{」で囲まれた値を取得するとき、キー要素を””で記述します。
このコツを覚えておくと、VBA-JSONパースで値を取得するのが簡単になります。
以降のプログラムで、jsonObjを使ってデータ処理をしていきます。
JSONパースに必要な参照設定
JSONパースするには「Microsoft Scripting Runtime」の参照設定にチェックを入れておく必要があります。
設定方法は以下で説明しています。
JSONパースを使わない場合の処理方法
このページではJSONパースを使って、データを取得するプログラムを紹介しています。
一方でJSONパースしない方法も存在します。
その方法は以下で紹介しています。
Split, replace, 連想配列などを駆使して、必要情報を抽出しています。
プログラム8|変数設定
1 |
Dim i As Long, k As Long, gyo As Long |
変数を設定します。
変数は以下で説明しています。
プログラム9|gyoを1とする
1 |
gyo = 1 |
gyoに1を入れます。
gyoはエクセルに出力するときの行を取得するための変数として使います。
gyo=1のときエクセルの2行目、gyo=2のときエクセルの3行目というようにgyoを活用します。
プログラム10|JSONパースした値を確認
1 2 3 4 5 6 7 8 9 10 |
For i = 1 To 4 Debug.Print "1", jsonObj(1)("timeSeries")(1)("areas")(i)("area")("name") For k = 1 To 3 Debug.Print "2", jsonObj(1)("timeSeries")(1)("timeDefines")(k) Debug.Print "3", jsonObj(1)("timeSeries")(1)("areas")(i)("weathers")(k) Debug.Print "4", jsonObj(1)("timeSeries")(1)("areas")(i)("winds")(k) Debug.Print "5", jsonObj(1)("timeSeries")(1)("areas")(i)("waves")(k) Next Next |
取得する番号とプログラム内に記述した1~5は連動しています。
今回は、取得する値は以下のとおりです。
2. 天気予報の日時(timeDefines)
3. 天候(weathers)
4. 風(winds)
5. 波(waves)
上記の画像だけだと、JSONパースした値が見えづらいため、以下に記述しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
[{ "publishingOffice":"気象庁", "reportDatetime":"2021-06-13T11:00:00+09:00", "timeSeries": [{ "timeDefines":["2021-06-13T11:00:00+09:00","2021-06-14T00:00:00+09:00","2021-06-15T00:00:00+09:00"], "areas": [{ "area":{ "name":"東京地方", "code":"130010"}, "weatherCodes":["200","203","202"], "weathers":["くもり 所により 昼過ぎ から 雨 で 雷を伴う","くもり 時々 雨 所により 雷 を伴う","くもり 一時 雨"], "winds":["南の風 23区西部 では 南の風 やや強く","南の風","東の風"], "waves":["0.5メートル 後 1メートル","0.5メートル","0.5メートル"]}, { "area":{ "name":"伊豆諸島北部", "code":"130020"}, "weatherCodes":["200","203","202"], "weathers":["くもり 所により 昼過ぎ から 雨","くもり 昼過ぎ まで 時々 雨 所により 雷 を伴う","くもり 一時 雨"], "winds":["南西の風","南西の風 後 南の風","北東の風 後 東の風"], "waves":["1.5メートル","1.5メートル","1.5メートル"]}, { "area":{ "name":"伊豆諸島南部", "code":"130030"}, "weatherCodes":["200","203","202"], "weathers":["くもり 所により 昼過ぎ から 雨","くもり 昼過ぎ まで 時々 雨 三宅島 では 雷 を伴う","くもり 一時 雨"], "winds":["南東の風","南東の風 後 東の風 やや強く","東の風 やや強く"], "waves":["1.5メートル","1.5メートル 後 2メートル ただし 三宅島 では 1.5メートル","2メートル 後 2.5メートル ただし 三宅島 では 1.5メートル 後 2メートル"]}, { "area":{ "name":"小笠原諸島", "code":"130040"}, "weatherCodes":["111","203","302"], "weathers":["晴れ 夜 くもり","くもり 昼前 から 夕方 雨 所により 雷 を伴う","雨 時々 くもり"], "winds":["南東の風 後 南の風","南の風 やや強く 後 西の風","南西の風"], "waves":["1.5メートル","1.5メートル","1.5メートル"]} ]}, 以下略 }] |
以下でDebug.Printを使って、想定した値が出力されるかどうかを検証します。
Debug.Printでの検証結果
値を見やすくするために、出力する文字列を加工しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
For i = 1 To 4 Debug.Print "i:" & i & "-1", jsonObj(1)("timeSeries")(1)("areas")(i)("area")("name") Debug.Print "-------------" For k = 1 To 3 Debug.Print "k:" & k & "-2", jsonObj(1)("timeSeries")(1)("timeDefines")(k) Debug.Print "k:" & k & "-3", jsonObj(1)("timeSeries")(1)("areas")(i)("weathers")(k) Debug.Print "k:" & k & "-4", jsonObj(1)("timeSeries")(1)("areas")(i)("winds")(k) Debug.Print "k:" & k & "-5", jsonObj(1)("timeSeries")(1)("areas")(i)("waves")(k) Next Next >>>i:1-1 東京地方 >>>------------- >>>k:1-2 2021-06-13T17:00:00+09:00 >>>k:1-3 くもり 所により 雨 で 雷を伴う >>>k:1-4 南の風 23区西部 では 南の風 やや強く >>>k:1-5 1メートル 後 0.5メートル >>>k:2-2 2021-06-14T00:00:00+09:00 >>>k:2-3 くもり 時々 雨 所により 雷 を伴う >>>k:2-4 南の風 >>>k:2-5 0.5メートル >>>k:3-2 2021-06-15T00:00:00+09:00 >>>k:3-3 くもり 一時 雨 >>>k:3-4 東の風 >>>k:3-5 0.5メートル >>>i:2-1 伊豆諸島北部 >>>------------- >>>k:1-2 2021-06-13T17:00:00+09:00 >>>k:1-3 くもり 所により 雨 >>>k:1-4 南西の風 >>>k:1-5 1.5メートル >>>k:2-2 2021-06-14T00:00:00+09:00 >>>k:2-3 くもり 昼過ぎ まで 時々 雨 所により 雷 を伴う >>>k:2-4 南西の風 後 南の風 >>>k:2-5 1.5メートル >>>k:3-2 2021-06-15T00:00:00+09:00 >>>k:3-3 くもり 一時 雨 >>>k:3-4 北東の風 後 東の風 >>>k:3-5 1.5メートル >>>i:3-1 伊豆諸島南部 >>>------------- >>>k:1-2 2021-06-13T17:00:00+09:00 >>>k:1-3 くもり 所により 雨 >>>k:1-4 南の風 後 南東の風 >>>k:1-5 1.5メートル >>>k:2-2 2021-06-14T00:00:00+09:00 >>>k:2-3 くもり 昼過ぎ まで 時々 雨 所により 雷 を伴う >>>k:2-4 南東の風 後 東の風 やや強く >>>k:2-5 1.5メートル 後 2メートル ただし 三宅島 では 1.5メートル >>>k:3-2 2021-06-15T00:00:00+09:00 >>>k:3-3 くもり 一時 雨 >>>k:3-4 東の風 やや強く >>>k:3-5 2メートル 後 2.5メートル ただし 三宅島 では 1.5メートル 後 2メートル >>>i:4-1 小笠原諸島 >>>------------- >>>k:1-2 2021-06-13T17:00:00+09:00 >>>k:1-3 くもり >>>k:1-4 東の風 後 南東の風 >>>k:1-5 1.5メートル >>>k:2-2 2021-06-14T00:00:00+09:00 >>>k:2-3 くもり 昼前 から 夕方 雨 所により 雷 を伴う >>>k:2-4 南西の風 やや強く 後 西の風 >>>k:2-5 1.5メートル >>>k:3-2 2021-06-15T00:00:00+09:00 >>>k:3-3 雨 時々 くもり >>>k:3-4 南西の風 >>>k:3-5 1.5メートル 後 2メートル |
上記のようにJSONに格納されている値を取得できたことが分かりました。
これをもとにエクセルに出力していきます。
参考情報
ここではfornextを使っていますが、別ページで事例を交えて説明をしています。
プログラム11|エクセルに出力
1 2 3 4 5 6 7 8 9 10 11 12 13 |
With ws.Range("A1") For i = 1 To 4 .Offset(gyo, 0).value = jsonObj(1)("timeSeries")(1)("areas")(i)("area")("name") For k = 1 To 3 .Offset(gyo, 1).value = jsonObj(1)("timeSeries")(1)("timeDefines")(k) .Offset(gyo, 2).value = jsonObj(1)("timeSeries")(1)("areas")(i)("weathers")(k) .Offset(gyo, 3).value = jsonObj(1)("timeSeries")(1)("areas")(i)("winds")(k) .Offset(gyo, 4).value = jsonObj(1)("timeSeries")(1)("areas")(i)("waves")(k) gyo = gyo + 1 Next Next End With |
今回は以下のように値を出力していきます。
B列: 2. 天気予報の日時(timeDefines)
C列: 3. 天候(weathers)
D列: 4. 風(winds)
E列: 5. 波(waves)
これで天気予報の情報(3日分)をエクセルに出力することができました。
プログラム12|オブジェクト解放
1 |
Set objHTTP = Nothing |
HTTPリクエストを行うときに生成したオブジェクトを解放します。
プログラム13|プログラム終了
1 |
Ens Sub |
プログラム終了させる記載です。
「End Sub」を読み込むと、プログラムが終了します。
プログラムの解説はここまでです。
応用|天気情報をOutlookやchatツールで通知
ここで取得した天気情報はOutlookやchatツールで通知させるところまで自動化できます。
以下のページでOutlookやChatツールの通知プログラムを紹介しています。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
成長の過程は以下で紹介しています。
学習の過程では、意識すべきポイントがあります。
特に独学の場合だと、勉強を優先してしまい、肝心な実践を疎かにしがちです。
私の経験では、実践から逆算した勉強が必要だと考えています。
目指すべきは会社でお金をもらいながら勉強することです。
要はVBAを仕事の一つとして上司に認めてもらうのです。
そうすればわざわざ高いお金を払って勉強をする必要がなくなります。
しかも作業を自動化して、会社やチームに貢献しつつ、自らのスキルアップできます。
そのために必要な考え方を以下で紹介しています。
とはいえ、プログラミング初心者でVBAについて知識ゼロの人もいるはずです。
いきなり会社でVBAで使うことさえ、とてつもなくハードルが高く見えてしまうものです。
その場合は、VBAの基本について学ぶ必要があります。
たとえば車の運転も慣れてしまえば、たいしたことではありません。
しかし教習所で運転の基本を学び、免許を取得することで、公道で運転できるようになります。
VBAも同じです。VBAに免許はありませんが、まずは基本を学ばないことには会社で使えるレベルにはなりません。
実際に私もプログラミング初心者のときは、動画を見たり書籍を読んだりして勉強しました。
今はオンラインの教材で無料で学習できるものも多いです。
上記のリンクでは、私の経験から勉強にオススメの教材を紹介しています。
興味がある人はご覧ください。