엑셀 VBA에서 google 캘린더의 일본 공휴일을 얻고 목록 출력하는 방법

출력 결과 이미지



VBA에서 Google 캘린더 API를 실행하여 엑셀에 이미지와 같은 휴일 목록을 출력합니다.


절차



Google Cloud Platform에서 API 키 만들기



VBA에서 google 캘린더 API를 실행하기 때문에 API를 활성화하고 API 키를 만듭니다.
Google Cloud Paltform에서 프로젝트를 이미 만든 경우 자격 증명 화면에서 API 키를 만듭니다.
(Google Cloud Paltform에서 프로젝트를 만든 적이 없는 사람은 내 과거 기사이지만 여기이 도움이 될 수 있습니다.


API 키를 작성하면 VBA에서 사용하므로 어딘가에 메모해 둡니다.
화면 오른쪽 하단의 키를 제한 링크에서 보안을 적절하게 설정할 수 있습니다.


VBA JSON을 사용하도록 설정



API 응답을 JSON으로 구문 분석하기위한 모듈이 github에 공개됩니다.
  • htps : // 기주 b. 코 m / V ba와 ls / V ba - J
  • Latest release에서 최신 버전을 다운로드하십시오.
  • VBA 메뉴의 ファイル -> ファイルのインポート에서 다운로드한 JsonConverter.bas를 가져옵니다.
  • (Windows의 경우) VBA ツール -> 参照設定 에서 Microsoft Scripting Runtime 확인하십시오.

  • VBA 코드



    APIKey 변수의 내용을 방금 만든 API 키로 바꿉니다.
    Main() 함수를 실행하면 출력 결과의 이미지처럼 출력됩니다.
    Sub Main()
        Const APIURL    As String = "https://www.googleapis.com/calendar/v3/calendars/"
        '日本の休日カレンダーのID  
        Const CalID     As String = "ja.japanese#[email protected]"    
        Const APIKey    As String = "さっき作ったAPIキーに置き換える"
    
        '祝日を取得したい期間(2020年1月1日~12月31日)
        Const StartDay  As Date = #1/1/2020#
        Const EndDay    As Date = #12/31/2020#
    
        'URLの作成
        Dim Url As String
    
        'APIキーと開始/終了日時をパラメータに設定
        Url = APIURL & CalID & "/events?key=" & APIKey _
            & "&timeMin=" & Format(StartDay, "yyyy-mm-dd") & "T00:00:00.000Z" _
            & "&timeMax=" & Format(EndDay, "yyyy-mm-dd") & "T23:59:59.000Z"
    
        'API実行
        Dim Result As String
        Result = GetContents(Url)
    
        '取得結果をJSONにパース
        Dim Parse As Object
        Set Parse = JsonConverter.ParseJson(Result)
    
        ' A列に日にち、B列に祝日名を出力
        Set Items = Parse("items")
        For i = 1 To Items.Count
            Set Item = Items(i)
            Cells(i, 1) = Item("start")("date")
            Cells(i, 2) = Item("summary")
        Next i
    
    End Sub
    
    Function GetContents(Url As String) As String
        Dim XmlHttp As Object
        Set XmlHttp = CreateObject("MSXML2.XMLHTTP")
        XmlHttp.Open "GET", Url, False
        XmlHttp.Send
        GetContents = XmlHttp.ResponseText
    End Function
    

    (참고까지) API 응답



    응답의 items 안에 공휴일 정보가 들어있는 배열이 있습니다. (설날만 발췌)
    이번은 start.date 와 summary 만을 엑셀에 출력했습니다만, 그 밖에도 링크라든지 이벤트 ID등이 있습니다.
    {
     "kind": "calendar#events",
     "etag": "\"p324fvifujfjue0g\"",
     "summary": "日本の祝日",
     "updated": "2020-02-22T05:12:53.000Z",
     "timeZone": "UTC",
     "accessRole": "reader",
     "defaultReminders": [],
     "nextSyncToken": "CMD-u4Wz5OcCEAAYAQ==",
     "items": [
      {
       "kind": "calendar#event",
       "etag": "\"3101521598000000\"",
       "id": "20200101_60o30d9l64o30c1g60o30dr56g",
       "status": "confirmed",
       "htmlLink": "https://www.google.com/calendar/event?eid=MjAyMDAxMDFfNjBvMzBkOWw2NG8zMGMxZzYwbzMwZHI1NmcgamEuamFwYW5lc2UjaG9saWRheUB2",
       "created": "2019-02-21T14:53:19.000Z",
       "updated": "2019-02-21T14:53:19.000Z",
       "summary": "元日",
       "creator": {
        "email": "ja.japanese#[email protected]",
        "displayName": "日本の祝日",
        "self": true
       },
       "organizer": {
        "email": "ja.japanese#[email protected]",
        "displayName": "日本の祝日",
        "self": true
       },
       "start": {
        "date": "2020-01-01"
       },
       "end": {
        "date": "2020-01-02"
       },
       "transparency": "transparent",
       "visibility": "public",
       "iCalUID": "[email protected]",
       "sequence": 0
      },
    

    참고 사이트



    도움을 주셔서 감사합니다 고마워요
  • Google 캘린더에서 자동으로 휴일 / 휴일을 얻는 방법
  • 우주 하나 알기 쉬운? VBA-JSON을 사용한 JSON 퍼스 방법
  • 좋은 웹페이지 즐겨찾기