2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Googleカレンダーから、名称に特定の文字を含むスケジュールだけをGoogleスプレッドシートに自動転記する

Posted at

1.目的と課題

  • スケジュールの数や人数が多い組織で、
    すべての予定をGoogleカレンダーから取得すると、
    転記先のGoogleスプレッドシートの動作が重くなる

「営業メンバー全員の当日以後30日までの商談スケジュールを、
Googleスプレッドシート(以下スプシ)上で把握したい」
という要望があり、
GASを用いて、Googleカレンダーから
各メンバーのスケジュールを自動取得して、
スプシに転記するようなシステムを作ることになりました。

しかし、筆者の所属先は商談の回数が多く、
またMTGなど商談以外のスケジュールや、スケジュールの取得対象となる人数も多いため、
彼らのすべてのスケジュールを取得・転記した場合、
・GASの実行完了までに時間がかかる
・スプシの動作自体も重くなる
など、業務に支障が出ることが分かりました。

2.改善策

そこで、「スケジュール名が特定の条件を満たした場合のみ(商談のスケジュールのみ)、
自動取得してスプシに転記
」というシステムに改良しました。

今回は、取得したスケジュールの先頭1文字が
「◎」の場合のみ取得、という形にしてみました。
(他のスケジュール名と被らなければ、「◎」に限らず任意の文字列で大丈夫です)

3.コード作成

function calendar() {
  const sp = SpreadsheetApp.getActiveSpreadsheet();
  const startTime = new Date();  //引数省略により現在日付時刻を取得
  const endTime = new Date(Date.parse(startTime) + (30 * 60 * 60 * 24 * 1000));    
   // parseで日付を文字列に変換     

  const ash = sp.getSheetByName('スケジュール転記先のシート名');
  const lastRow = ash.getLastRow ();  //シートの最終行取得
  ash.getRange(2,1,lastRow,4).clearContent();  
    //実行前に、A~D列の2行目以降(前回の内容)をクリアして初期化
  //(1行目は項目名、2行目以降にデータが入っているものと仮定)

  const cal = CalendarApp.getCalendarById('【メールアドレス】'); 
  const event = cal.getEvents(startTime,endTime); 

  let i = 2  //予定転記先シートの行数カウント用の変数
  let j = 0  //カレンダー上のスケジュールの数カウント用の変数
  for (j in event){
    if (event[j].getTitle().substring(0, 1) == "◎"){
      //スケジュール名の先頭1文字が「◎」の場合のみ取得
      ash.getRange(i,1).setValue(event[j].getTitle());            //A列:イベントタイトル
      ash.getRange(i,2).setValue(event[j].getStartTime());        //B列:イベント開始時刻  
      ash.getRange(i,3).setValue(event[j].getEndTime());          //C列:イベント終了時刻
      ash.getRange(i,4).setValue("=round((rc[-1]-rc[-2])*24)");   //D列:所要時間
      i += 1
    }else{  //スケジュール名が条件を満たさない場合、何もせず次の繰り返し処理へ
    }
  }
}

if (event[j].getTitle().substring(0, 1) == "◎"){
substringメソッドを使用して、「一番左から数えて1文字目」を取得し、
「◎」である場合のみ、スケジュールを取得して各要素をA~D列に記載、という内容にしています。

4.ルールの周知徹底

今回はコード作成自体は簡単なものでしたが、
むしろ、多忙な営業メンバーに忘れずにスケジュール名の先頭を「◎」にしてもらう、
ルールを徹底してもらうためにはどうするか
、という点の方がポイントになるように思います。

筆者の場合は、
・予定を取得・表示したスプシを営業メンバー自身が閲覧する場合、
 見出しなど目立つ箇所に、Googleカレンダー上でのスケジュール作成の際のルールを記載する
・GASを用いて上記スプシを検索し、1週間(5営業日)以内に「◎」のある予定が一切入っていない
 営業メンバーに対して、Slack等に自動でメッセージを投稿して警告する
等の対策を実践しています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?