概要
Google は XML/ICAL/HTML の形式で日本の祝日データ (当年とその前後一年分) を提供しています。今回は XML のデータを取得して, 祝日名と日付情報を配列に格納してみます。
コード
GitHub に置いておきますので, 必要な方は自由に使ってください。
slangGetHoliday.cls
使い方
- 適当な Excel ファイルに [slangGetHoliday.cls] をインポートする。
- 標準モジュールを新規追加し, その中に下記の様なサブルーチンを用意する。
下記サンプルでは, 取得した祝日データをイミディエイトウィンドウに表示します。ちなみにソートは行っていません。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編
あとがき
やはり祝日データの需要は大きいみたいですね。個人的には民間企業とかじゃなくて, もっと公的な機関がデータを提供して欲しいと思っています。日本政府とかね。