質問と回答(2023/12/16)

PR

前提

本ページは数日後に削除予定です。

PR

質問(大雑把な要約)

2024年の祝日一覧を取得したが、日付の「年」の部分が2023年になってしまう。
2024年にしたいが手動で修正する以外の方法はあるか?

PR

回答

上手いやり方は思い付けませんでした。
イマイチなやり方として以下を思い付きました。

・日付を2024年にするために「1年を加算」する

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
    Dim listObj As listObject
    Dim rangeObj As range
    
    '------------------------------------------------
    '既にシート「祝日一覧」が存在する場合は削除
    '------------------------------------------------
    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
        'テーブル化してlistObjectを取得
        Set listObj = .ListObjects.Add
    End With
    
    '------------------------------------------------
    'テーブルを修正
    '------------------------------------------------
    'テーブル名
    listObj.Name = "祝日一覧テーブル"
    '日付を2024年にするために「1年を加算」する
    For Each rangeObj In listObj.ListColumns("日付").DataBodyRange
        rangeObj = DateAdd("yyyy", 1, rangeObj)
    Next
    '日付の形式をyyyy/mm/ddにする
    listObj.ListColumns("日付").DataBodyRange.NumberFormat = "yyyy/mm/dd"

End Sub

日付の「年」を「2024年」にするために「1年を加算」しています(72~74行目)。


実行結果は以下です。

実行結果
実行結果
タイトルとURLをコピーしました