Office関連

Google Calendar APIを使って日本の祝日を取得するVBAマクロ

祝日の一覧を用意する必要があったので、Google Calendar APIを使って日本の祝日を取得するマクロを考えてみました。

APIキーの作成

Calendar APIを利用するに当たり、まずは必要となるAPIキーを用意します。

  1. Google Cloud Consoleを開き、Google アカウントでログインします。
  2. プロジェクトの選択画面から「プロジェクトを作成」ボタンをクリックします。
  3. 新しいプロジェクト画面が表示されるので、プロジェクト名を入力し、「作成」ボタンをクリックします。
  4. しばらく待つとプロジェクトが作成されるので、プロジェクトの選択画面から作成したプロジェクトを開きます。
  5. APIとサービス」から「ライブラリ」を開きます。
  6. Google Calendar API」を選択し、「有効にする」ボタンをクリックします。
  7. 認証情報を作成」ボタンをクリックします。
  8. プロジェクトへの認証情報の追加画面が表示されますが、「API キー」をクリックしてこの手順をスキップします。
  9. API キー画面が表示されるので、「作成」ボタンをクリックしてAPIキーを作成します。
  10. 作成された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を使ってみました。

関連記事

  1. Office関連

    古い形式のWordテンプレートを新しい形式に一括変換するVBScript

    古い形式のWordテンプレート(dot)を新しい形式(dotx,dot…

  2. Office関連

    コマンドマクロ一覧(Word 2013 Customer Preview)

    Word 2013 CP版に組み込まれている「コマンドマクロ」のコマン…

  3. Office関連

    VBAでTTSエンジンの各種情報を列挙する

    今回はTTSエンジンの各種情報を列挙するマクロを紹介します。Mic…

  4. Office アドイン

    [Office用アプリ]野良アプリのススメ

    「Office 用アプリの概要」にもある通り、Office用アプリを公…

  5. Office アドイン

    Office 2016で進化したOffice アドイン

    今日OfficeDevを眺めていて気が付いたのが「OfficeJS S…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP