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を使ってみました。

FiddlerからTrello APIを実行する。前のページ

2017年10月の人気記事次のページ

関連記事

  1. Office関連

    モヤさまのショウ君にいろいろ喋らせるVBAマクロ(2)

    前回に引き続き、HOYAサービス株式会社様が公開されている「Voice…

  2. Office関連

    Office 365 Soloをインストールしてみました。

    2014年10月17日、Microsoftの新しいOffice製品「O…

  3. Office関連

    「Excel VBAでラクラク Win64 APIプログラミング」(大村あつし著)レビュー

    当ブログでも以前書評を書いた「Excel VBAの神様 ボクの人生を変…

  4. Office関連

    Adobe Readerを利用してPDFファイルのページ数を取得するVBAマクロ

    mougの回答用に書いたコードです。mougは半年でログが消えてし…

  5. Office関連

    Office365APIEditorでMicrosoft Graph APIを手軽に呼び出し!

    下記Tech Communityの記事で、Microsoftのエンジニ…

  6. Excel

    OneNoteの指定したセクションをページごとに指定した形式で出力するマクロ

    今回はOneNoteの指定したセクションをページごとに指定した形式で出…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP