Google カレンダーに登録したそれぞれの予定までの日数を Google スライド上で視覚化する方法を考えたので紹介します。仕事の優先順位を考えるのに使えると思います。
作業環境
やりたいこと
Google カレンダーに登録した予定を Google スライド上に表示しつつ、それぞれの予定までの残り日数を視覚的に表現します。「残り4日」と言われましても、あんまりピンと来ないんですよね……。
また、[スケジュール] ビューにすると予定のみを表示することができますが、これだとそれぞれの予定の間の日数が分かりにくくなるので、私には向いていないように感じています。
完成図
Google スライドに GIF 画像を貼るとプレゼンテーション中にも動いてくれます。テンションが上がりますね。
手順
Google にログインする
まずは Google にログインします。Google のトップページを開いた時に、画面右上に自分の名前やアイコンが出ていれば既にログインしています。
ログインしていない場合は、画面右上の「ログイン」の文字をクリックしてください。
新しいスプレッドシートを作成する
Google のトップページや Google カレンダーなどの画面右上にある点9個のボタンをクリックしてください。Google のサービス一覧が出ます。ちなみにこの点9個のボタンをキャンディボックスと呼ぶそうです。この一覧から「スプレッドシート」を探してクリックしてください。
左上にある「+」ボタン(空白と書いてあるやつ)をクリックしてください。そうするとフォームの作成画面が開きます。
スプレッドシートを編集する前に、真っ先にファイル名を付けてください。「無題のスプレッドシート」のままだと、後から探すときに苦労します。今回は「イベントまでの日数」としました。
スプレッドシートにプログラムを追加する
Google カレンダーの予定をスプレッドシートに転記するためのプログラムを作成します。といっても基本的にコピペで済みます。
画面上部のメニューを [拡張機能] > [Apps Script] の順でクリックしてください。「Apps Script」という画面が開くはずです。この画面をスクリプトエディタ、あるいは単にエディタと呼びます。このエディタで、Google フォームなどの Google 製サービス上で動く GAS というプログラミング言語でプログラムを書くことがでます。
何はともあれ、画面左上の「無題のプロジェクト」の部分を変更しましょう。「無題の○○」が増えていくとどれがどれだか分からなくなります。ここでは「イベントまでの日数」としました。
プロジェクト名を変更したら、いよいよプログラムの貼り付けです。エディタにもともと入っているであろう
function myFunction() { }
というコードを全て消してから、以下のコードを貼り付けて保存 (Ctrl
+ S
) してください。
function outputCalendarEvents() { // スプレッドシートの A1 セルから C1 セルに入力するヘッダー const headers = ["イベント", "開始日", "終了日"] // イベントを取得する期間の日数 const duration = 180 // イベントを取得するカレンダーの ID // `CalendarApp.getDefaultCalendar().getId()` はユーザのデフォルトカレンダーの ID const calendarIds = [ CalendarApp.getDefaultCalendar().getId(), "0123456789abcdefghijklmnopqrstuvwxyz@group.calendar.google.com", "zyxwvutsrqponmlkjihgfedcba9876543210@group.calendar.google.com" ] // ID からカレンダーを取得 const calendars = calendarIds.map(x => { return { id: x, calendar: CalendarApp.getCalendarById(x)} }) // イベントを取得する期間の開始日(今日)と終了日(今日の duration 日後) const startTime = new Date(new Date().setHours(0, 0, 0, 0)) const endTime = new Date(new Date(startTime).setDate(startTime.getDate() + duration)) // カレンダーのうち ID が間違っているなどしてアクセスできなかったものを除き、イベントの情報を取得 // 取得する情報は、イベントのタイトル、開始日および終了日 const events = calendars. filter(x => x.calendar !== null). map(x => x.calendar.getEvents(startTime, endTime)). flat(). map(x => { if (x.isAllDayEvent()) { const previousDay = new Date(x.getAllDayEndDate().setDate(x.getAllDayEndDate().getDate() - 1)) return [x.getTitle(),x.getAllDayStartDate(), previousDay] } else { return [x.getTitle(), x.getStartTime(), x.getEndTime()] } }) // 取得したイベントの情報をスプレッドシートに転記 if (events.length > 0) { const sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() sh.getRange(1, 1, 1, events[0].length).getDataRegion(SpreadsheetApp.Dimension.ROWS).clearContent() sh.getRange(1, 1, 1, headers.length).setValues([headers]) sh.getRange(2, 1, events.length, events[0].length).setValues(events) } // ID が間違っているなどして取得できなかったカレンダーの ID をログに出力 const notFoundNames = calendars. filter(x => x.calendar === null). map(x => x.id). reduce((prev, curr) => prev + "\n" + curr) Logger.log(`以下の ID のカレンダーが見つかりませんでした。ID が間違っていないか確認してください。:\n${notFoundNames}`) }
12~13行目の 0123456789abcdefghijklmnopqrstuvwxyz@group.calendar.google.com
のような部分は、予定を取得したいカレンダーのカレンダー ID に置き換えてください。
デフォルトカレンダー(ユーザ名のカレンダー)の予定のみ取得したい場合は、10~14行目を以下のように書き換えてください。
const calendarIds = [ CalendarApp.getDefaultCalendar().getId() ]
貼り付けて保存したら、一度テストしてみましょう。エディタ画面上部の [デバッグ] ボタンの左の部分が outputCalendarEvents
になっていることを確認して、なっていなければそれにしてから [実行] ボタンをクリックしてください。
初回のみ、[承認が必要です] というメッセージが出るはずです。
承認の流れはこちらのページでご覧ください。個人用アカウントと学校用または職場用アカウントで多少異なりますが、とにかく自分のアカウントを選択して注意事項を読み、問題なければ [許可] をクリックしてください。
承認したらプログラムが動き、スプレッドシートに予定が入ったはずです。見に行きましょう!
おー入ってる。こんなにいらない!
最後に、プログラムの実行を自動化して、カレンダーに予定を追加する度にスプレッドシートを自動で更新するように設定します。画面左端の時計のアイコン(トリガーアイコン)をクリックしてください。
「トリガー」という画面になるはずです。
画面右下の [+ トリガーを追加] ボタンをクリックし、
以下のように設定して保存してください。
項目 | 設定内容 |
---|---|
実行する関数を選択 | outputCalendarEvents |
実行するデプロイを選択 | Head |
イベントのソースを選択 | カレンダーから |
カレンダーの詳細を入力 | カレンダー更新済み |
カレンダーのオーナーのメールアドレス | (カレンダーのオーナーのメールアドレス) |
エラー通知設定 | 今すぐ通知を受け取る |
以下のようになっていれば成功です。
ではカレンダーに予定を入れてみて、スプレッドシートが自動で更新されるかテストしましょう。カレンダーに予定を入力。数秒のタイムラグの後、反映。
やったね!
もし、カレンダーのオーナーが自分以外の人であるなどして、上記の設定で上手くいかない場合は、以下のように1時間おきに実行する設定にするか、
項目 | 設定内容 |
---|---|
実行する関数を選択 | outputCalendarEvents |
実行するデプロイを選択 | Head |
イベントのソースを選択 | 時間主導型 |
時間ベースのトリガーのタイプを選択 | 時間ベースのタイマー |
時間の間隔を選択(時間) | (好きな間隔) |
エラー通知設定 | 今すぐ通知を受け取る |
以下のように決まった時間帯に実行する設定にしてください。
項目 | 設定内容 |
---|---|
実行する関数を選択 | outputCalendarEvents |
実行するデプロイを選択 | Head |
イベントのソースを選択 | 時間主導型 |
時間ベースのトリガーのタイプを選択 | 日付ベースのタイマー |
時刻を選択 | (好きな時間帯) |
エラー通知設定 | 今すぐ通知を受け取る |
これでプログラムの作業は完了しました。
ちなみに、プログラムの実行状況は画面左端の [実行数] アイコンをクリックして開いたページから確認できます。
スプレッドシートに数式を追加する
ここまでで、カレンダーの予定をスプレッドシートに転記することができました。次はそれぞれの予定までの日数を視覚化しましょう。
まず、スプレッドシートの D1
セル、E1
セル、F1
セル、H1
セルに以下のように見出しを入力してください。
次に、セルに以下の数式を入力してください。数式を入力するのは D2
セル、E2
セル、F2
セルの3か所のみです。
D2
セル
=ArrayFormula(IF(B2:B="","",INT(B2:B)-TODAY()))
E2
セル
=ArrayFormula(IF(B2:B="","",NETWORKDAYS(TODAY(),B2:B,H2:H)))
F2
セル
=ArrayFormula(IF(E2:E="","",IF(E2:E<0,"",REPT("|",E2:E))))
するとこのようになるはずです。
勤務先独自の祝日は、H2
セルから下に入力してください。
数式の入力は完了です。
スプレッドシートの見た目を整える
ここまで作成したスプレッドシートのデータをスライドに貼り付けるわけですが、その前に少し表の見た目を整えましょう。
このセクションは単に見た目を整えるだけで、飛ばしてもシステム全体には何ら影響はありません。読まなくても自分でカスタマイズできる方や見た目に執着しない方は、「予定をスライドに貼り付ける」にお進みください。
日付の表示が長すぎるので、表示形式を変えましょう。開始日と終了日の B
列と C
列を選択してください。
画面上部の [表示形式] をクリックし、[数字] > [カスタム数値形式] の順にクリックしてください。
入力欄に MM/dd
と入力し、[適用] をクリックしてください。
開始日と終了日の表示がすっきりしました。
次に、全体的に中央寄せにしましょう。これはただの好みです。A
列から E
列までを範囲選択したあと、Ctrl
キーを押したまま F1
セルをクリックしてください。その状態で画面上部の [水平方向の配置] > [中央] の順でクリックしてください。
選択した箇所が中央寄せになりました。
最後に、残りの平日の日数が少なくなった予定に色を付けましょう。A2
セルから F11
セルまでを範囲選択してください。
その状態で画面上部の [表示形式] > [条件付き書式] の順でクリックしてください。
画面右端に出てきたはずの [条件付き書式設定ルール] 画面で以下のように設定してください。
項目 | 内容 |
---|---|
範囲に適用 | A2:F11 |
セルの書式設定の条件... | カスタム数式 |
値または数式 | =$E2<6 |
書式設定のスタイル | (バケツのアイコンで好きな色を選択する) |
残りの平日が5日以下になった予定の行に色がついたはずです。
条件付き書式を設定する範囲や、色をつける日数は適宜変えてください。
これでスプレッドシートの作業は完了です。
予定をスライドに貼り付ける
Google のトップページや Google カレンダーなどの画面右上にある点9個のボタン(キャンディボックス)をクリックして、アプリの一覧から「スライド」を探してクリックしてください。
左上にある「+」ボタン(空白と書いてあるやつ)をクリックしてください。そうすると新しいスライドが開きます。
「無題のスライド」のままだと後から探すときに苦労しますので、真っ先にファイル名を付けましょう。今回は「イベントまでの日数」としました。
今回は白紙のスライドを使いたいので、画面左端の一覧でスライドを右クリックして、[レイアウトを適用] > [空白] の順にクリックしてください。
まっしろ。
ではスプレッドシートのデータを貼り付けましょう。スプレッドシートに戻って、A1
セルから F11
セルまでを範囲選択してください。
そのままスライドに戻ってきて貼り付け (Ctrl
+ V
) してください。
「表の貼り付け」という画面が出るはずです。[スプレッドシートにリンク] にチェックを入れて [貼り付け] をクリックしてください。
こうなるはずです。
表の右上に鎖のアイコンがあるのが見えるでしょうか。これは「スプレッドシートのデータとリンクしていますよ」という意味です。スプレッドシートの方を更新すると、スライドの方も連動させることができます。
これで、「カレンダー→スプレッドシート→スライド」という連携ができました!
ただこれでは見た目があんまりなので、少し整えましょう。それで終わりです。
スライドの見た目を整える
このセクションは単に見た目を整えるだけで、飛ばしてもシステム全体には何ら影響はありません。読まなくても自分でカスタマイズできる方や見た目に執着しない方は、「スライドを更新する」にお進みください。
以下の点について見た目を整えます。
- 表の配置を調整する
- 行の高さや列の幅を揃える
- 罫線を引く
- 見ていて楽しくなるようにする
まずは表の大きさを整えましょう。表をクリックした状態で、周囲のグレーの線をマウスで引っ張って、丁度いいと思う大きさにしてください。
そうしたら、表を右クリックして [ページ中央に配置] > [左右] の順にクリックしてください。
表を水平方向に中央寄せできました。
次に行の高さや列の幅を整えましょう。ただしその前に、行や列の境目が見にくいので罫線を引きます。
スプレッドシートのセルと同じ要領で、表のセルを全て範囲選択してください。そうすると選択部分の右上に「四角の中に▼」のボタンが現れるはずです。それをクリックして、出てきたアイコンの左上のものをクリックしてください。田んぼの田のやつです。
全ての罫線が選択状態になりました。
この状態で、画面上部の [枠線の色] をクリックし、出てきたカラーパレットで好きな色を選択してください。
罫線が入りました。これで行や列の境目が分かります。
見やすいように列の幅を調整しましょう。「イベント」列と「残り平日 (グラフ)」列は幅を広く取りたいので、それ以外の列を狭くしてください。列の境目にマウスを持って行って、罫線をクリックして動かせば調整できます。
大雑把に調整したら、
「開始日」列から「残り平日」列までを範囲選択して右クリックし、[列の幅を均等にする] をクリックしてください。
列の幅が揃いました。
同様に、行の高さも均等にしましょう。表全体を範囲選択して右クリックし、[行の高さを均等にする] をクリックしてください。
行の高さも揃いました。
これは好みですが(見た目に関しては全て好みですが)、行内で文字が下に寄っているのはなんとなく好きではないので、中央寄せにします。表全体を範囲選択した状態で、画面上部の [配置] > [中央(縦)] の順にクリックしてください。
行内で中央寄せできました。
罫線多すぎ!
縦の罫線は好みでないので消します。ここもお好みで。表全体を範囲選択して、「四角の中に▼」のボタンをクリックし、内側の縦の罫線のボタンをクリックしてください。罫線が選択状態になります。
その状態で画面上部の [枠線の色] > [透明] の順にクリックしてください。
内側の縦の罫線が消えました。
同様に外側の縦の罫線と、一番上の罫線も消します。これは好みです。
それから、見出しの行を選択して太字にして、
見出しの下の罫線を選択して、
太くして、
色を濃くするのが私は好きです。
こうなるはずです。
好きな言葉や画像で飾りましょう。やっぱり見たくなるような工夫がないとね。推しの画像とか貼りましょうよ。
冒頭にもあるように、Google スライドに GIF 画像を貼るとプレゼンテーション中にも動きます。テンションが上がりますね。
これで全工程が終了しました。お疲れ様でした!
ただし、利用する際にちょっとすることがあります。このまま読み進めてください。
スライドを更新する
ここまでで「カレンダー→スプレッドシート→スライド」の連携を構築しました。カレンダーに予定を入れる度にスプレッドシートに自動で転記するようにもなっています。ただし、スプレッドシートの内容をスライドに反映させるところは自動化できないようで、そこだけ手動です。
スプレッドシートのデータに変更があると、スライド上の予定表の右上に「更新」というボタンが出ます。
これをクリックすると更新できます。
どうやらこの手順は自動化できそうにありませんので、カレンダーに予定を追加したら「更新」ボタンをクリックしてください。注意していただきたいのが、スライドショー中は「更新」ボタンが表示されないという点です。たまにスライドショーを中断して更新を確認してください。
結び
3回にわたって Google のアプリで予定やタスクを管理する話をしてきました。これで優先順位を考えて効率的かつ漏れなく仕事ができるといいなと思います。
予定やタスクがなくなればもっといいのになと思います。