【VBA】内閣府のサイトから祝日の一覧を取得する【自動化】

内閣府のサイトにある

祝日の一覧を…

内閣府のサイトから祝日の一覧
内閣府のサイトにある祝日の一覧


VBAで取得してシート上に読み込むことが
できます!

VBAで祝日の一覧をシート上に読み込んだ
VBAで祝日の一覧をシート上に読み込んだ


他のサイトに記載されている祝日一覧も、
内閣府のサイトを元に作成されているはずです!
※素直に内閣府のURLを紹介すればいいのに…。
※祝日の日にちは何かと変更されるんだから…
※20年後の祝日の日付をいま計算しても、きっと変更されるし…。

PR

VBAコード

ここでは例として
 ・既にシート「祝日一覧」が存在する場合は削除
 ・シート「祝日一覧」を新規作成
 ・シート「祝日一覧」にWebサイト上の表(今年の祝日一覧)を読み込んで表を作成
 ・表をテーブル化(=スタイルを設定)
をします。

Option Explicit

Sub getPublicHolidayList()

    '祝日一覧を読み込むシート名
    Const SHEET_PUBLIC_HOLIDAY As String = "祝日一覧"
    '取得したい表を持つURL(今年の祝日一覧)
    Const TARGET_URL As String = "https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html"
    
    Dim sheet As Worksheet
    Dim sheetPublicHoliday As Worksheet
    
    '------------------------------------------------
    '既にシート「祝日一覧」が存在する場合は削除
    '------------------------------------------------
    For Each sheet In ThisWorkbook.Worksheets
        If sheet.Name = SHEET_PUBLIC_HOLIDAY Then
            '確認メッセージを非表示
            Application.DisplayAlerts = False
            'シート削除
            Worksheets(SHEET_PUBLIC_HOLIDAY).Delete
            '確認メッセージを表示
            Application.DisplayAlerts = True
        End If
    Next
    
    '------------------------------------------------
    'シート「祝日一覧」を新規作成
    '------------------------------------------------
    Set sheetPublicHoliday = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    sheetPublicHoliday.Name = SHEET_PUBLIC_HOLIDAY
    
    '------------------------------------------------
    'シート「祝日一覧」にWebサイト上の表(今年の祝日一覧)を読み込んで表を作成
    '------------------------------------------------
    With Worksheets(SHEET_PUBLIC_HOLIDAY).QueryTables.Add(Connection:="URL;" + TARGET_URL, _
                                          Destination:=Range("B2"))
        '列幅を元の表と同じにする
        .AdjustColumnWidth = True
        '書式は設定しない
        .WebFormatting = xlWebFormattingNone
        '指定したテーブルのみ取得する
        .WebSelectionType = xlSpecifiedTables
        '2つ目の表(今年の祝日一覧)を取得する
        .WebTables = 2
        'データ取得を実行する
        .Refresh BackgroundQuery:=False
        '作成される「クエリと接続」を削除
        .Delete
    End With
    
    '------------------------------------------------
    '表をテーブル化
    '------------------------------------------------
    With Worksheets(SHEET_PUBLIC_HOLIDAY)
        '対象シートをアクティブにする
        .Activate
        'テーブル化したい範囲の一番左上を選択状態にする
        .Range("B2").Select
        'テーブル化する(名前定義も含む)
        .ListObjects.Add.Name = "祝日一覧テーブル"
    End With

End Sub

「取得したい表を持つURL」として、「内閣府のサイトの当該ページ」を指定しています(8行目)。

「Destination」に「Range(“B2”)」と指定しているため、
 ・読み込んだ内容はセル「B2」から設定
されます(37行目)。

内閣府のサイトには複数の表があります。本記事を作成した日(2021/6/13時点)においては、上から2つ目の表が「今年の祝日一覧」のため、「WebTables」に「2」を指定しています(45行目)。
※あくまで「本記事を作成した日(2021/6/13時点)においては」です。
※内閣府のサイトを参照した日によっては、上から1つ目の表が「今年の祝日一覧」となります。その場合は「WebTables」に「1」を指定してください。

表をテーブル化することで「スタイル」を設定できます(55~62行目)。

PR

実行結果

内閣府のサイトから祝日の一覧を取得できました。

実行結果
実行結果
PR

参考①

上記のVBAコードは、以下の記事を参考にして作成しました。

VBAでシートの削除


●VBAでWebサイトの表を読み込む


VBAで表をテーブル化してスタイルを設定

PR

参考②

内閣府のサイトの祝日の一覧は以下です。

PR

参考③

内閣府のサイトから
 ・「昭和30年(1955年)から来年の祝日」のCSVファイルを取得
することもできます。


また
 ・インターネット上のCSVファイルをVBAで取得
することもできます。


また
 ・CSVファイルをシートへ読み込む
こともできます。

PR

参考④

例えば
 ・上記の「祝日の一覧を取得するVBA」を
 ・Windowsのタスクスケジューラで毎年決まった日(2021/6/13等)に自動実行させれば
 ・自動で祝日の一覧を最新化
できます。

タスクスケジューラからVBA(マクロ)を自動実行する方法は、以下の記事をご確認ください。