スプレッドシートのガントチャート作成をGASで自動化する【シート公開・コピー利用可】

schedule Published
published_with_changes Updated
Category folderMake
format_list_bulleted Contents

仕事では便利なタスク管理ツールが導入されているため、進行管理にスプレッドシートを使う必要はないが、2年程前に進行管理もエクセルじゃないとダメ!という稀なケースがあったので作ってみた。結局その一回しか使っていないが、タスク管理ツールに課題を登録する前の計画を立てる段階では便利なので、無駄じゃなかったと思う。

アドオンでこういった類はあるようだが、自己流にアレンジしたい方には便利だと思い、Googleスプレッドシート+GASを配布しています。
使用した方は、使い方動画を公開しているYouTubeopen_in_newのコメントで感想などをもらえると嬉しいです。

GAS(Google Apps Script)とは

日付のセルを人力で作るのが嫌だったが、GAS(Google Apps Script)を使うと自動で日付をセルに反映できたりする。

Google Apps Scriptとは、Googleによって開発されたスクリプトプラットフォームである軽量のアプリケーション開発のためのGoogleのワークスペースプラットフォーム。 主にGoogleのサービスを自動化するスクリプト言語である。

Googleスプレッドシートで主に使われるが、それ以外でも利用ができる。非常に適応範囲が広いので、例えば、SNSに返信が届いた場合Gmailに届ける。Gmailで期限の近いタスクを自分のSlackで表示する等のこともできる。

出典:フリー百科事典『ウィキペディア(Wikipedia)』

実際に今回作ったGASで、日付を自動反映した様子。

これはみんなGASに興味持っちゃうはずだ。Google万歳。

Googleスプレッドシート+GASの公開リンク

需要はないかもだが、今回作った「Googleシート+GAS」を公開したので、コピーして利用できるようにした。ノンプログラマーがその場限りで書いたものなので、クソコードのご指摘なら大歓迎です。

non-programmer(ノンプログラマー)

プログラム開発を専門にする職種ではないが,自分の業務遂行上必要にせまられてコンピュータを利用し,そのためにプログラムを作成しなければならないような人のこと

Weblio英和辞書open_in_new

なお、日本の祝日を取得するのに、Holidays JP APIopen_in_newを使わせて頂きました。ありがとうございます。

ガントチャートの用途について

基本的にプロジェクトの計画を立てる目的で使っています。
実際の課題管理や進行管理はBacklogなどのタスク管理ツールを用いる前提。
BacklogでなくともRedmineやNotionなど無料で使えるものもあるので、何かしら使うのがオススメ。

課題管理や進捗管理もやるとなると、ガントチャートに細かい変更を反映をしたり、ちょっとしたコメントや進捗率は付けるのは無理が出てくる。 何%とかセルに書かせたところで、その課題の具体的な状況や本当に潜む遅延の可能性は把握できなかったり。単純で量的タスクだけのプロジェクトなどであれば、タスク管理ツールなど使わずにシートで管理してもよいと思う。

タスクの階層は2階層としており(Backlogが親子2階層なので合わせている)、タスクの階層を深くするのも避けた。階層深くしなくても、タスクの分け方で大抵は対応できるかなと。
時間があればこのガントチャートのタスクをBacklogの課題へ登録するGASにも挑戦したい。

スプレッドシートのガントチャートだけで、細かくタスク管理や進行管理をしたい方は、私のガントチャートをベースに高機能化された方がいるようなので、 「Google Spreadsheet で高機能ガントチャート! - Qiita」open_in_newを確認してください。

シートの説明と使い方

descriptionシート「schedule」

ガントチャートを生成するシート。
A~N列までを削除すると、GASで指定した範囲がずれるので削除はしないでください。

  • H1セル
    全体スケジュールの開始予定日を入力。
  • I1セル
    全体スケジュールの終了予定日を入力。
  • A列~D列
    自動で採番。B列~D列はA列のIDのために使用(列を非表示)。
    A列~D列の4行目のARRAYFORMULAでIDを付けているため、4行目の値は削除不可。
  • E列
    マイルストーン(区切り・節目)を入力。
  • F・G列
    タスクを入力(F列が親タスク、G列が子タスク)。
  • H列
    タスクの開始予定日を入力。
  • I列
    タスクの期限日を入力。
  • J~M列
    実働期間や状況を入力。
    便利なタスク管理ツールがある中、スプレッドシートで予実管理をやるのは避けたいので非表示。
    一応列だけ準備してます。

    改良版では列だけ用意していたのも削除した。
  • J列
    主担当を入力。細かいPJTメンバーの各個人ではなく、会社や組織、または代表者など粒度粗めで使っている。
  • K列~
    GASで自動化されているので、入力する必要はない。
    条件付き書式で主担当によってチャートの色を変えられる。

descriptionシート「holiday」

  • A列
    ガントチャートで休日にしたい日付を入力(yyyy-MM-dd)。
    日本の祝日の場合、カスタムメニューの祝日アップデートを実行すると、Holidays JP APIから祝日を取得する(前年から翌年まで)。祝日以外を休日とする場合は、手入力で追加。(手入力の追加後に祝日アップデートをするとAPIの祝日で上書きされる。祝日アップデートを実行後に手入力で追加すること。)

menuカスタムメニュー

メニューバーの一番右にガントチャートという独自メニューを用意している。

  • * 公開ファイルは閲覧のみの権限のため、コピーしたファイルでないとカスタムメニューは表示されない。
  • * 開いた直後、スクリプト完了まで少し待たないとカスタムメニューは表示されない。

ガントチャートメニュー

GASの初回実行時に承認を求められるので、許可してください。
GASのコードは、メニューバーのツールから「スクリプトエディタ」に進んで確認できる。(バージョン?によってはメニューバーが変わっており、ツールが無い場合は、拡張機能から「Apps Script」に進むと確認できる。)

  • PJT期間反映
    「schedule」シートのH1セルとI列セルの開始日と終了日に合わせてK列~に日付セルを生成。
  • 祝日アップデート
    実行すると「holiday」シートに現在年の前年~翌年までの祝日が追加される。
    「holiday」シートに記載がある日付は、ガントチャートの「PJT期間反映」を実行時に休日として反映する。(「holiday」シートに記載するだけでは反映されない。)

ondemand_video使い方の動画

動画の音声は「音読さん」を使ってみた。

おわりに

効率化で浮いた時間を別の仕事に割り当てるのはオススメしません。
コーヒーを飲むなり、興味のあるもののお勉強など、浮いた時間を有意義に使って欲しいです。

普通の企業はちゃんとツールを導入するなどで、従業員の生産性を高めることをしていると思うが、あとは自分で頑張っての環境だと、努力した結果、別の仕事を増やされたとなるのが怖いところ。

せっかく仕事を楽にしたのに、残念なタスクをさらに増やされないようにしたい。