Excelでよく見かけるのが祝日専用のシートに祝日一覧を記載してそれをカレンダー系のシートでvlookupなどで判定して祝日なら色付けするというような方法ですが、この祝日専用シートの祝日はネットで検索した情報などをコピペなどで手動設定しているケースが多いです。
今回はボタン2つで最新の祝日情報をExcelに表示するVBAのサンプルコードをご紹介します。
最新の祝日用のCSVファイルは内閣府が公開している最新の祝日ファイルを使用します。
VBA サンプルコード「祝日CSVのダウンロード」
- 上記で照会した内閣府の祝日CSVファイルをダウンロードする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 |
'ダウンロード用API(引数:0,Urlリンク,フォルダー名,0,0)を受け取る Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As Long, _ ByVal szURL As String, _ ByVal szFileName As String, _ ByVal dwReserved As Long, _ ByVal lpfnCB As Long _ ) As Long Option Explicit Sub csv_download_Click() Dim SUrl As String Dim Fol As String Dim Fname As String Dim SNow As String SNow = Replace(Time, ":", "_") Fol = "C:\" Fname = Fol & "祝日一覧.csv" '祝日一覧.csvとしてダウンロードします。 '日本の祝日CSVデータのリンク SUrl = "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv" Dim ReturnF As Variant 'API関数を格納する変数 'ファイルをダウンロード・フォルダに格納 '第二引数にURL,第三引数に任意のフォルダーパス,その他の引数は0を渡します。 ReturnF = URLDownloadToFile(0, SUrl, Fname, 0, 0) If ReturnF <> 0 Then '失敗したら0以外の数値を返します。 MsgBox "失敗!" & ReturnF Exit Sub End If MsgBox "祝日CSVファイルをダウンロードしました。" End Sub |
VBA サンプルコード「ダウンロードしたCSVをExcelへ表示」
- ダウンロードしたCSVファイルを読み込んでExcelへ表示する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 |
Dim varFileName As Variant Dim intFree As Integer Dim strRec As String Dim strSplit() As String Dim row As Long Dim col As Long varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If varFileName = False Then Exit Sub End If intFree = FreeFile '空番号を取得 Open varFileName For Input As #intFree 'CSVファィルをオープン row = 3 Do Until EOF(intFree) Line Input #intFree, strRec '1行読み込み row = row + 1 strSplit = Split(strRec, ",") 'カンマ区切りで配列へ For col = 0 To UBound(strSplit) Cells(row, col + 1) = strSplit(col) Next Loop Close #intFree |
実行結果例
✅ 1) 最新祝日情報の “自動取得API” を使う(CSV以外の方法)
◎ Holidays-JP API(JSON/CSV)
ネット上で最新の日本の祝日データを JSON または CSV 形式で取得できる API があります(GitHub で公開)。
内閣府データと違い、過去〜当年〜翌年まで柔軟に取得可能です。
📌 URL 例
|
1 2 |
JSON: https://holidays-jp.github.io/api/v1/date.json CSV: https://holidays-jp.github.io/api/v1/date.csv |
JSON を VBA で扱う場合は、標準では扱えないため VBA-JSON ライブラリの導入が一般的です。
✅ 2) Power Query + API で最新の祝日一覧を Excel に直接取得する(VBA不要)
Excel の標準機能 Power Query を使えば、Web API から祝日データを自動で取り込んで一覧を作れます。
これは Excel 2016 以降でかなり強力です。
手順例:
- 「データ → Web から」
- Holidays-JP API の JSON URL を指定
- Power Query で「祝日一覧テーブル」に変換
- Excel のシートへロード
この方法なら VBA を書かなくても、年度変更に対応できます。
✅ 3) Google カレンダー API から祝日を取得する方法(API キー方式)
Googleカレンダーに公式の日本祝日カレンダーがあるため、
Google Calendar API を利用すると Excel でも VBA から動的取得が可能です。
※ API キー発行と OAuth の設定が必要です。
✅ 4) VBA で直接 JSON を扱う際のコツ
API が JSON で返す場合は JSONパースライブラリが必要です(例えば VBA-JSON)。
JSON 内でキーが日付、値が祝日名なので、辞書的扱いが楽になります。
|
1 2 3 4 5 6 7 |
' VBA-JSON などを使い JSON ← Web から取得してパース Dim json As Object Set json = JsonConverter.ParseJson(responseText) For Each key In json.Keys Debug.Print key, json(key) ' 日付/祝日名 Next |
✅ 5) 祝日データを Excel で使う際の便利な周辺テクニック
🎯 ■ NETWORKDAYS ファミリーを活用した稼働日数計算
Excel の WORKDAY や NETWORKDAYS 関数に、祝日一覧を渡せば
土日+祝日込みの稼働日数計算ができます。
=NETWORKDAYS(A1,B1, 祝日一覧範囲)
✅ 6) 内閣府 CSV のメリット・デメリット
✔ メリット
- 公的で最も正確
- CSV なので Excel で読み込み容易
✖ デメリット
- Web API で自動取得しないと 毎年手動更新が必要
- VBA で取り扱うには ダウンロード処理 + Parse が必要
📌 まとめ:最新祝日データ活用の選択肢
| 方法 | 自動更新 | 実装難度 | VBA スキル |
|---|---|---|---|
| 内閣府 CSV をダウンロード | ❌ 手動更新 | 🔰 初心者向け | 低 |
| Holidays-JP API + VBA | ✅ 自動 | 中級 | 中 |
| Power Query + API | ✅ 自動 | 初〜中 | 不要 |
| Google Calendar API | ✅ 自動 | 上級 | 高 |


