【2026年対応】祝日データをインターネットから自動取得してセルに色付けするエクセルマクロ【ExcelVBA・マクロ】

ExcelVBA

 Excelでスケジュール表やシフト表を作るとき、祝日を入力するのは大変ですよね。そこで便利 なのが 祝日データをインターネットから自動取得(API)して色付けする方法 です。

 インターネットから情報を取得するとなるとJSONライブラリなどを使用することがありますが、今回はライブラリは使わずにインターネットから自動取得(API)して色を付けていきます。 

 これなら いちいち祝日のセルに手入力で操作せず、自動で色を付けることができます!

 今回は2024年・2025年・2026年の祝日データを公開している下記のサイトからAPIで祝日データを取得してエクセルシートに反映していきます。

Holidays JP API (日本の祝日API)
Holidays JP API は、日本の祝日一覧をJSONで返却するAPIです (CSV形式もサポート)

動作イメージはこちら

この記事はこんな方におすすめです

  • 祝日を自動で反映させたい
  • Excelカレンダーやシフト表を正確に管理したい
  • エクセルでインターネットから情報を取得(API)して自動化に挑戦してみたい

シートの確認

今回はこのようなシートを使います。A列に2026年の日付が入力されています。

祝日が入力されているセルをマクロ(自動)で全てピンクに塗りつぶします。

VBAコード

Sub ColorHolidaysFromAPI_Simple()

    Dim http As Object
    Dim response As String
    Dim ws As Worksheet
    Dim lastRow As Long, r As Range
    Dim d As String
    Dim pos As Long
    
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' API呼び出し
    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", "https://holidays-jp.github.io/api/v1/date.json", False
    http.Send
    response = http.responseText
    
    ' A列の日付と照合
    For Each r In ws.Range("A2:A" & lastRow)
        If IsDate(r.Value) Then
            d = Format(r.Value, "yyyy-mm-dd")
            ' JSONテキスト内に日付が含まれるかチェック
            pos = InStr(response, """" & d & """")
            If pos > 0 Then
                r.Interior.Color = RGB(255, 200, 200) ' 薄いピンクで塗りつぶし
            End If
        End If
    Next
    
    MsgBox "祝日をAPIから取得して色付けしました!", vbInformation
End Sub

コードの解説

1.インターネットの祝日API(日本の祝日一覧)にアクセスして、祝日データ(JSONテキスト)を受け取って、変数(response)に格納

Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", "https://holidays-jp.github.io/api/v1/date.json", False
    http.Send
    response = http.responseText

2.A列の日付が祝日データを格納した変数(responseに含まれているかをチェックして、含まれていたら、そのセルを色付け(薄いピンク)

For Each r In ws.Range("A2:A" & lastRow)
        If IsDate(r.Value) Then
            d = Format(r.Value, "yyyy-mm-dd")
            ' JSONテキスト内に日付が含まれるかチェック
            pos = InStr(response, """" & d & """")
            If pos > 0 Then
                r.Interior.Color = RGB(255, 200, 200) ' 薄いピンクで塗りつぶし
            End If
        End If
    Next


 そして詳しい説明は省きますが、ライブラリを使用しない代わりに祝日名(成人の日など)はセルに反映することができていません。
 逆に言うと、祝日の日付のみを取得することによってライブラリの使用をしなくてもインターネットから祝日情報を取得することができるようになっています。

マクロ実行

さきほど入力したコードを実行すると、A列の祝日のセルがピンク色に塗りつぶされました。

コメント

タイトルとURLをコピーしました