LoginSignup
6
8

More than 5 years have passed since last update.

日本の祝日データをEXCEL(VBA)で取得してみた

Last updated at Posted at 2015-01-24

概要

Google は XML/ICAL/HTML の形式で日本の祝日データ (当年とその前後一年分) を提供しています。今回は XML のデータを取得して, 祝日名と日付情報を配列に格納してみます。

コード

GitHub に置いておきますので, 必要な方は自由に使ってください。
slangGetHoliday.cls

使い方

  1. 適当な Excel ファイルに [slangGetHoliday.cls] をインポートする。
  2. 標準モジュールを新規追加し, その中に下記の様なサブルーチンを用意する。

下記サンプルでは, 取得した祝日データをイミディエイトウィンドウに表示します。ちなみにソートは行っていません。XML から取得した順番に表示されます。

Public Sub main()

    Dim myGetHoliday As New slangGetHoliday
    Dim holidayData As Object
    Dim numHolidayData As Integer
    Dim i As Integer
    Dim holidayDataSet() As String
    Dim re As Object
    Dim reMatch As Object

    myGetHoliday.setTmpFilePath ("c:\")    '一時ファイル作成用ディレクトリ設定
    Set holidayData = myGetHoliday.getHolidayData()

    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "[0-9]{4}/[0-9]{2}/[0-9]{2}"
    re.Global = True

    numHolidayData = holidayData.Length
    ReDim holidayDataSet(numHolidayData - 18, 1) As String

    For i = 0 To numHolidayData - 18
        Set reMatch = re.Execute(holidayData.Item(i + 17).childNodes.Item(5).nodeTypedValue)
        holidayDataSet(i, 0) = holidayData.Item(i + 17).childNodes.Item(4).nodeTypedValue
        If reMatch.Count > 0 Then
            holidayDataSet(i, 1) = reMatch(0).Value
        End If
    Next

    For i = 0 To numHolidayData - 18
        Debug.Print holidayDataSet(i, 1) & " " & holidayDataSet(i, 0)
    Next

End Sub

holidayDataSet(i, 1) に日付データ (yyyy/mm/dd形式), holidayDataSet(i, 0) に祝日名が入っています。

注意

これを作った後に気づいたのですが, XML 形式で提供されているデータは祝日情報を網羅できていないようです。私が動作確認を行った時点では, 明らかに ICAL/HTML よりも情報が少ない。

データが更新されることを期待して, この記事を残します・・・。

Add 2015/01/25 22:21
ICAL から取得する方法も記事にしました。
日本の祝日データをEXCEL(VBA)で取得してみた - ICAL編

あとがき

やはり祝日データの需要は大きいみたいですね。個人的には民間企業とかじゃなくて, もっと公的な機関がデータを提供して欲しいと思っています。日本政府とかね。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8