Googleサービス PR

【GAS】六曜をGoogleカレンダーに追加する

GASをつかって、Googleカレンダーを大安カレンダーにしてみた
記事内に商品プロモーションを含む場合があります

Googleカレンダーに六曜表示

日取り決めはスムーズに

以前は、紙の手帳とGoogleカレンダーを併用して予定を管理してました。

GooglePixel6aを使い始めてからはGoogleカレンダーだけで管理するのが習慣となりました。

デフォルトだと六曜が分からない

子どもの七五三参りの予定を組もうとしたときにGoogleカレンダーには大安の日がわかりませんでした。

GASでGoogleカレンダーに六曜を表示するスクリプトを組んでみました。

日取り決めに確認する六曜とは?

六曜ときくと、あまり聞き慣れない言葉ですが、大安や仏滅など6種類のその日の吉凶を占う指標のことをいいます。

縁起が良い日を選ぶなら大安

六曜は、先勝→友引→先負→仏滅→大安→赤口の順番でまわり、5回まわると30日。つまりおおよそ1ヶ月となります。

一番縁起の良い日は大安。悪いのは仏滅です。Googleカレンダーで大安と仏滅が確認できると子どものイベントごとなど、日取り決めもスムーズになります。

予定表をスプレッドシートで準備

sheetsのロゴ

今回はスプレッドシートを活用します。それぞれのセルに情報を入れていきます。

2030年までの六曜データは下記スプレッドシートをコピーしてご活用ください。

六曜スケジュール表(〜2030年)コピー

カスタム①:時間の設定

開始時間と終了時間の設定項目を設けてます。これは空欄だとカレンダーには終日予定として登録されます。

個人的に終日予定だと表示が濃いめになってしまうので、あえて0:00〜1:00の設定にしております。

カスタム②:イベントカラーの設定

一つのカレンダーIDにまとめて六曜の日程を入れるのもいいですが、カラーをつけるとより見やすくなります。

Googleカレンダーではイベントカラーとして11色設けてくれています。好きな色に設定しましょう。

プロパティカラーコード
PALE_BLUEラベンダー
PALE_GREENセージ
MAUVEブドウ
PALE_REDフラミンゴ
YELLOWバナナ
ORANGEミカン
CYANピーコック
GRAYグラファイト
BLUEブルーベリー
GREENバジル
REDトマト

カスタム③:カレンダーの追加

一つの六曜データはをインポートするためのカレンダーをひとつ用意します。

カレンダー名は任意で設定してもらいスプレッドシートのJ列に同じカレンダー名を入力してください。

スクリプト設定手順

スクリプトを学ぶと効率があがる

スクリプトは以下のとおりです。コピーしてお使いください。順番通りに作業すれば、Googleカレンダーで日取り決めの確認がスムーズになります。

function Create_Schedule() {

  // 読み取り範囲(表の初めの行と最後の列)
  const topRow = 2;
  const lastCol = 11;
  const statusCellCol = 1;
  const EventIDCol = 11; //イベントid

  // スケジュール表の列数(0から数える)
  const statusNum = 0;
  const startdayNum = 1;
  const startNum = 2;
  const enddayNum = 3;
  const endNum = 4;
  const titleNum = 5;
  const locationNum = 6;
  const descriptionNum = 7;
  const colorNum = 8;   //色の列
  const calnameNum = 9; //カレンダー名の列
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();// シートを取得
  let calendar = CalendarApp.getDefaultCalendar();// カレンダーの設定
  let lastRow = sheet.getLastRow();// 予定の最終行を取得
  const contents = sheet.getRange(topRow, 1, lastRow - topRow + 1, lastCol).getValues();// 予定の一覧を取得

  // 順に予定を作成
  for (let i = 0; i < contents.length; i++) {
    // 「済」と「ー」の場合は無視する
    if (contents[i][statusNum] === "済" || contents[i][statusNum] === "ー") {
      continue;
    }

    // 値をセット 日時はフォーマットして保持
    let startday = contents[i][startdayNum];
    let startTime = contents[i][startNum];
    let endday = contents[i][enddayNum];
    let endTime = contents[i][endNum];
    let title = contents[i][titleNum];
    let calendarName = contents[i][calnameNum];//設定するカレンダー名
    let options = { location: contents[i][locationNum], description: contents[i][descriptionNum] };// 場所と詳細をセット

    console.log(startday + " " + contents[i][titleNum]);

    try {
      let event;

      if (calendarName !== "") {
        let calendars = CalendarApp.getCalendarsByName(calendarName);
        if (calendars.length > 0) {
          calendar = calendars[0];
          console.log(calendars[0].getName());
        }
      }

      // 終了日時を作成
      if (endday === '') {
        endday = startday;
      }

      let startDate = new Date(startday);
      let endDate = new Date(endday);

      // 開始終了時刻が空欄なら終日で設定
      if (startTime === '' || endTime === '') {
        //予定を作成
        endDate.setDate(endDate.getDate() + 1);  
        event = calendar.createAllDayEvent(
          title,
          startday,
          endDate,
          options
        );
      } else {
        // 開始日時を作成
        startDate.setHours(startTime.getHours());
        startDate.setMinutes(startTime.getMinutes());

        endDate.setHours(endTime.getHours());
        endDate.setMinutes(endTime.getMinutes());

        // 予定を作成
        event = calendar.createEvent(
          title,
          startDate,
          endDate,
          options
        );
      }

      if (contents[i][colorNum] !== "") {
        let color = contents[i][colorNum];
        event.setColor(getColorNum(color));
      }

      console.log(event.getId());
      sheet.getRange(topRow + i, EventIDCol).setValue(event.getId());
      sheet.getRange(topRow + i, statusCellCol).setValue("済");// 予定が反映されたら「済」にする

    } catch (e) {
      
    }
  }

  function getColorNum(color) {
    let cnum;
    switch (color) {
      case "PALE_BLUE": cnum = 1; break;
      case "PALE_GREEN": cnum = 2; break;
      case "MAUVE": cnum = 3; break;
      case "PALE_RED": cnum = 4; break;
      case "YELLOW": cnum = 5; break;
      case "ORANGE": cnum = 6; break;
      case "CYAN": cnum = 7; break;
      case "GRAY": cnum = 8; break;
      case "BLUE": cnum = 9; break;
      case "GREEN": cnum = 10; break;
      case "RED": cnum = 11; break;
      default: cnum = 0; break;
    }
    console.log(cnum);
    return cnum;
  }
}
  • STEP1
    拡張機能をひらく
    スプレッドシートの拡張機能タブ
  • STEP2
    Apps Scriptを選択
  • STEP3
    スクリプト貼り付け
    プロジェクト名は任意
  • STEP4
    アクセス権限の承認
  • STEP5
    スクリプト実行

六曜カレンダーの反映完了

Googleカレンダーで大安の日が確認できるように設定できます。

これにて作業完了です。日取り決めの際、Googleカレンダーひとつで確認できるようになりました。

大安、仏滅ぐらいが分かればいい、という方は準備したスプレッドシートで不要なものは除いてからスクリプト実行すれば良いと思います。

これからもデバイスで完結できるものを一つでも増やしていきます!