祝日の一覧を用意する必要があったので、Google Calendar APIを使って日本の祝日を取得するマクロを考えてみました。
APIキーの作成
Calendar APIを利用するに当たり、まずは必要となるAPIキーを用意します。
- Google Cloud Consoleを開き、Google アカウントでログインします。
- プロジェクトの選択画面から「プロジェクトを作成」ボタンをクリックします。
- 新しいプロジェクト画面が表示されるので、プロジェクト名を入力し、「作成」ボタンをクリックします。
- しばらく待つとプロジェクトが作成されるので、プロジェクトの選択画面から作成したプロジェクトを開きます。
- 「APIとサービス」から「ライブラリ」を開きます。
- 「Google Calendar API」を選択し、「有効にする」ボタンをクリックします。
- 「認証情報を作成」ボタンをクリックします。
- プロジェクトへの認証情報の追加画面が表示されますが、「API キー」をクリックしてこの手順をスキップします。
- API キー画面が表示されるので、「作成」ボタンをクリックしてAPIキーを作成します。
- 作成されたAPIキーをコピーして、メモ帳等のテキストエディタに貼り付けておきます。
Google Calendar APIを使って日本の祝日を取得するマクロ
※下記コードはScriptControlを使用しているため、64ビット版Officeでは動作しません。
※コード中の「ApiKey」の値は、上記手順で取得したAPIキーに置き換えてください。
Option Explicit Private Sub GetHolidaysFromGoogleCalendar() 'Google Calendar APIを使って日本の祝日を取得 Dim url As String Dim js As String Dim summary As String, start_date As String Dim items As Object, item As Object Dim jso_start As Object Dim i As Long '-------------------------------------------------- '※必要に応じて変更 '-------------------------------------------------- Const TargetYear As String = "2018" '祝日を取得する年 Const CalendarId As String = "ja.japanese#holiday@group.v.calendar.google.com" Const ApiKey As String = "(取得したAPIキー)" '-------------------------------------------------- url = "https://www.googleapis.com/calendar/v3/calendars/" & _ EncodeURL(CalendarId) & _ "/events?orderBy=startTime&singleEvents=true" & _ "&timeMin=" & EncodeURL(TargetYear & "-1-1T00:00:00+09:00") & _ "&timeMax=" & EncodeURL(TargetYear & "-12-31T00:00:00+09:00") & _ "&key=" & ApiKey With CreateObject("WinHttp.WinHttpRequest.5.1") .Open "GET", url, False .Send Select Case .Status Case 200: js = .ResponseText End Select End With If Len(Trim(js)) < 1 Then Exit Sub i = 1 '初期化 js = "(" & js & ")" With CreateObject("ScriptControl") .Language = "JScript" Set items = CallByName(.CodeObject.eval(js), "items", VbGet) End With With ActiveSheet For Each item In items Set jso_start = CallByName(item, "start", VbGet) start_date = CallByName(jso_start, "date", VbGet) summary = CallByName(item, "summary", VbGet) .Cells(i, 1).Value = start_date .Cells(i, 2).Value = summary i = i + 1 Next End With End Sub Private Function EncodeURL(ByVal Target As String) As String 'URLエンコード With CreateObject("ScriptControl") .Language = "JScript" EncodeURL = .CodeObject.encodeURIComponent(Target) End With End Function
上記コードを実行すると、選択中のシートに、指定した年の祝日が書きこまれます。
祝日を取得するAPIは他にも「Holidays JP API (日本の祝日API)」や「カレンダー API」があるのですが、今回は王道なGoogleのAPIを使ってみました。
この記事へのコメントはありません。