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

    Outlookの連絡先をvcf形式で一括保存する方法

    Outlookの連絡先をvcf形式で保存する場合、通常は「連絡先を v…

  2. Office関連

    メモ帳だけでOutlook用アドインを作ってみる。

    「SharpDevelopでExcel用COMアドインを作成する方法」…

  3. Office関連

    ExcelのWebクエリからのアクセス情報

    mougに面白い質問がありました。・Querytables.a…

  4. Office関連

    Microsoft Graph ExplorerがMicrosoft アカウント(MSA)に対応しま…

    Azure AD v2.0 エンドポイントによって、個人用Micros…

  5. Office関連

    「あのコマンドどこだっけ? for Office 2013」の紹介

    Word MVPの新田さんのブログでも紹介していただいている自作フリー…

  6. Office関連

    [Excel Services ECMAScript]ActiveWorkbookのシート数を取得す…

    埋め込んだExcelワークブックのシート数を取得するコードです。 …

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP