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関数で、使えるデータに処理しています。

実行結果

見事に、祝日の一覧が取得できました!

注意点

日本の祝日一覧の提供を停止、更新の停止、またはトラブル等でサーバーが停止していたり、URLが変更されたりすると取得できないようになりますので、ご注意ください。

まとめ

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

記事を書いた人

稲垣

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

コメント

コメントする

目次