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関連

    Office 365 APIをVBAから呼び出す(3)

    前々回の記事でOffice 365とAzure ADの紐づけを、前回の…

  2. Office関連

    関数一覧(Excel 2013)

    関数の挿入ダイアログから抽出したExcel 2013の関数情報を表にし…

  3. Office関連

    コンテンツコントロールに外部XMLのデータをマップするWordマクロ

    Word 2007で追加された機能「コンテンツコントロール」を使うと外…

  4. Office関連

    [Word VBA]ルビ(ふりがな)ダイアログの操作に挑む

    2016/10/28 追記:改良版のマクロを書きました。…

  5. Office関連

    Word 2013では右クリックからBing検索できるようになりました。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  6. Office アドイン

    作業ウィンドウのアプリをWord 2013にも対応させる。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP