VBAで祝日データをネット上から簡単に取得する方法

こんにちは!大阪市を拠点に活動している『縁紡ぐ』の稲垣です。
SWELLを使ったホームページ制作や、Excel、ACCESS、RPAなどのシステム開発を行っています。
また、Excel、Word、Outlookの研修や、情報セキュリティ研修も行っています。身近なITの相談相手になりたいと思っています。
お気軽にお問い合わせください。
VBAで祝日データをネット上から取得するメリット
業務で祝日データを手動で確認するのは、結構手間ですよね。年に1回手入力している場合も多いのではないでしょうか?そして、間違っていると困るので、読み合わせしたりして。
今回は、VBAで祝日を取得する方法を紹介しますね!
祝日をAPIで提供してくれているサイトがある
祝日は毎年変わる可能性があるので、最新の情報を年に1度程度取得する必要があります。日本の祝日は、APIで提供してくれているサイトがありますので、そちらを利用したいと思います。
https://holidays-jp.github.io/
GitHubというコードの履歴管理ができるところに、Json形式で、日本の祝日を下記のURLで取得できるように公開してくれています。データは、Googleカレンダーから自動でしているとのことです。
Google 日本の祝日一覧
https://holidays-jp.github.io/api/v1/date.json
実際に使ってみよう!
データは、Json形式で取得することができます。APIでよく使われている形式です。Jsonを扱いやすくするためのVBA-JSONもあるのですが、インストールが必要なため今回は、使用せずに対応します。
VBAコード
先ほどのURLに、Getメソッドでリクエストを送り、データを取得して、祝日というシートに表示するコードをご紹介します。
Sub ImportHolidaysByComma()
Dim http As Object
Dim jsonResponse As String
Dim ws As Worksheet
Dim i As Long
Dim entries As Variant
Dim entry As Variant
Dim dateValue As String
Dim nameValue As String
Dim keyValue As String
' 新しいシートを作成
Set ws = ThisWorkbook.Sheets.Add
ws.Name = "祝日"
' HTTPリクエストを作成
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://holidays-jp.github.io/api/v1/date.json", False
http.send
' ステータスコードを確認
If http.Status <> 200 Then
MsgBox "サーバーが応答していません。処理を終了します。", vbExclamation
Exit Sub
End If
' レスポンスを取得
jsonResponse = http.responseText
' ヘッダーを書き込む
ws.Cells(1, 1).Value = "日付"
ws.Cells(1, 2).Value = "祝日名"
' JSONデータをカンマで分割
jsonResponse = Mid(jsonResponse, 2, Len(jsonResponse) - 2) ' 最初と最後の波括弧を削除
entries = Split(jsonResponse, ",")
' 各祝日をループ処理
i = 2
For Each entry In entries
' 日付と祝日名を取得
keyValue = Split(entry, ":")(0)
nameValue = Split(entry, ":")(1)
' 不要なダブルクオーテーションを削除
dateValue = Replace(Replace(keyValue, """", ""), " ", "")
nameValue = Replace(Replace(nameValue, """", ""), " ", "")
' 改行を削除
dateValue = Replace(dateValue, vbLf, "")
nameValue = Replace(nameValue, vbLf, "")
' 日付の形式を調整
dateValue = Replace(dateValue, "-", "/")
' シートに書き込む
ws.Cells(i, 1).Value = dateValue
ws.Cells(i, 2).Value = nameValue
i = i + 1
Next entry
' 列幅を自動調整
ws.Columns("A:B").AutoFit
MsgBox "祝日データのインポートが完了しました。"
End Sub
Json形式をReplace関数で、使えるデータに処理しています。
実行結果

見事に、祝日の一覧が取得できました!
注意点
まとめ
VBAを使えば、手間をかけずに祝日データを自動で取得できるんです。業務効率化を目指している方には、特におすすです。このコードを参考にして、自分の業務にも活かしてみて欲しいと願っています。

稲垣
- Excel、ACCESSでのシステム開発が得意
- ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
- 自家焙煎するほどのコーヒー好き
- 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
- 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント