営業・企画部の吉田です!
スペースワンでは、10年以上前からGoogle Workspace(当時は G Suite)を使っています。
メール、カレンダー、ドライブ……気がつけば、無くてはならない仕事の相棒となっています。今回ご紹介する内容は、スプレッドシート × ToDo連携です。 “現場を改革するため”ではありません。【私が忘れないために】作った仕組みです。(笑)

イベントごとに、やること・期限・メモが散らばりがちで、頭の中だけで整理しようとすると、どうしても抜けが出てしまう。「今日はこれとこれをやらなきゃいけなかったのに…!」と気づくのが夜、なんてこともありました。そこで、スプレッドシートに一覧でまとめて、ボタンを押すとToDoリスト(Googleタスク)に自動登録される仕組みをつくりました。
これが想像以上にラクで、自分が助かるだけじゃなくて、チームのタスク共有にも便利かも!ということで、詳しく説明したいと思います!
1.スプレッドシートに記載した内容を自分の「Google Tasks(Googleタスク)」に自動追加する方法
今回は、チームを想定して1つのスプレッドシートからそれぞれのtodoリストに反映させる方法です。
①スプレッドシートを準備する。
私の場合は、A列=案件名、B列=担当者の名前、C列=Todoの期限、D列=Todo書き出し済みの✓、E列=Todoの内容、F列=具体的仕様‥‥など必要な情報を記入できるように準備しました。

②Googleの「タスク」に任意のタスクリストを作成する。
私は、自分の「タスク」に【スタッフAのタスクリスト】を作成しました。
(※スタッフA=私、スタッフBをチームメンバーと考えます)

③ ①で作成したスプレッドシートに下記スクリプトを設置する。
スプレッドシートの「拡張機能」⇒「Apps Script」内のコード.gsに張り付ける。
タイトルは任意に変更し(変更しなくてもOK)、90行目の「スタッフAのタスクリスト」を②のGoogleタスクで作成したリストの名前に変更する。
※今回は「スタッフAのタスクリスト」として作成しているので変更せず進めます。

/**
*Google Tasksに追加する
*/
function AddToDoList() {
// ToDoリストのIDを取得する(スタッフA用、スタッフB用で分ける)
const staffAId = getTasksIdForstaffA(); // スタッフAのタスクID
const staffBId = getTasksIdForstaffB(); // スタッフBのタスクID
// 読み取り範囲(表の始まり行と終わり列)
const topRow = 2;
const lastCol = 6;
const statusCellCol = 4;
// 予定の一覧バッファ内の列(0始まり)
const statusNum = 3;
const dayNum = 2;
const titleNum = 4;
const descriptionNum = 5;
const assigneeNum = 1; // B列は担当者(スタッフAまたはスタッフB)
// シートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 予定の最終行を取得
let lastRow = sheet.getLastRow();
// 予定の一覧をバッファに取得
const contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues();
// 順に予定を作成
for (let i = 0; i <= lastRow - topRow; i++) {
try {
// 「済」の場合は無視する
if (contents[i][statusNum] === "✓") {
continue;
}
// 担当者を取得
let assignee = contents[i][assigneeNum];
// 担当者によってタスクを分ける
let taskId = null;
if (assignee === "スタッフA") {
taskId = staffAId; // スタッフAのタスクリスト
} else if (assignee === "スタッフB") {
taskId = staffBId; // スタッフBのタスクリスト
} else {
continue; // 担当者が「スタッフA」または「スタッフB」でない場合はスキップ
}
// タスクの値をセット 日時はフォーマットして保持
let day = contents[i][dayNum];
let title = contents[i][titleNum];
let notes = contents[i][descriptionNum];
console.log(day + " " + contents[i][titleNum]);
const dueStr = Utilities.formatDate(contents[i][dayNum], "Asia/Tokyo", "yyyy-MM-dd");
const task = {
title: title,
notes: notes,
due: dueStr + "T00:00:00.000Z"
};
// タスクを追加
Tasks.Tasks.insert(task, taskId);
// 予定が作成されたら「済」にする
sheet.getRange(topRow + i, statusCellCol).setValue("✓");
// エラーの場合ログ出力する
} catch (e) {
Logger.log(e);
}
}
// 完了通知
Browser.msgBox("ToDoリストに追加しました。");
}
/**
* スタッフAのタスクリストIDを取得する
*/
function getTasksIdForstaffA() {
const myTaskLists = Tasks.Tasklists.list();
for (let i = 0; i < myTaskLists.items.length; i++) {
if (myTaskLists.items[i].title === "スタッフAのタスクリスト") {
return myTaskLists.items[i].id;
}
}
Logger.log("staffAのタスクリストが見つかりません");
return null;
}
/**
* スタッフBのタスクリストIDを取得する
*/
function getTasksIdForstaffB() {
const myTaskLists = Tasks.Tasklists.list();
for (let i = 0; i < myTaskLists.items.length; i++) {
if (myTaskLists.items[i].title === "スタッフBのタスクリスト") {
return myTaskLists.items[i].id;
}
}
Logger.log("スタッフBのタスクリストが見つかりません");
return null;
}
④Apps ScriptにAPIを追加する。
「サービス」の+ボタン⇒「Google Tasks API」を選択し、「追加」
「保存」⇒「実行」を選択

⑤承認・アクセス許可
「承認が必要です」のポップアップから「権限を確認」を選択し、自分のアカウントを選択する。
アカウントへのアクセスを求められるので、「続行」を選択。

⑥実行するためのボタンを設置する
スプレッドシートに戻り、「挿入」⇒「図形描画」を選択し、ボタン用の図形を作る
サイズを整えて設置したい場所へ移動
「設定マーク」から「スクリプトの割り当て」を選択し、「AddToDoList」と入力する。
⑥実行する

⑦作成した「実行ボタン」をクリック!
最後に「実行ボタン」をクリックし、自分のGoogleタスクに書き出しが完了すれば、スプレッドシートのD列に✓マークがつき、完了です。

2. 便利なのはこれだけじゃない。スプレッドシートには伸びしろが多い!
スプレッドシートは、実はまだまだ便利の宝庫です。
- フィルタビュー
自分だけのフィルタや並べ替えができる。
他の人の作業を邪魔しないのが最高。 - コメント機能
「ここ直して」「ここ確認して」など、口頭で伝えるより100倍ラク。 - バージョン履歴
間違えて消しても戻せる。
イベント資料で命を救われたこと多数。
誰がいつどこを変更したかが目視できる。
スターで【よく使う資料だけ上に表示】
探す時間をぐっと短縮できる。
3.注意点!Officeファイルをそのまま編集するのは危険!
Driveに置いたExcelやWordはウェブ上でスプレッドシートと同じように編集できますが、そのまま開いて編集すると、保存されないことがあります。
- 自動保存が効かない
- 同時編集に弱い
- 更新履歴が残らない
スペースワンでは、社内用は極力 Google形式(スプレッドシート・ドキュメント)に変換するように徹底しています。これだけでトラブルがかなり減りました。
4.ルールがあると、もっと使いやすくなる
スプレッドシートは自由度が高い反面、ルールがないとすぐに散らかります。(これは、GoogleDriveに限らず、共有サーバなどでも一緒ですね)
- ァイル名のルール
- フォルダの構造
- Google形式 / Office形式の使い分け
- ローカル保存の禁止
少しずつ整えていくことで、みんなが同じ景色で仕事ができるようになります。
まとめ
今回のToDo連携は、特別な目的があったわけではなく、「忘れないために、自分の仕事をラクにしたい」という理由だけでつくったものです。
でも、そういう 【自分のための工夫】が一番続くし、一番役に立つんだなと感じています。
ToDo連携が出来たことで、カレンダーにも表示されるし、スマートフォンからもチェックできるようになりました。
これからも、「こうしたらもっとラクになるかも」という小さな改善を見つけたら、また紹介します!

