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

schedule Published
published_with_changes Updated
Category folderMake
format_list_bulleted Contents

仕事では便利なタスク管理ツールが導入されているので、WBSやガントチャートのためにスプレッドシートを使う必要はないのですが、2年程前にエクセルとかじゃないとダメ!という稀なケースがあったので作ってみました。結局その一回しか使っていませんが、GASを触ってみた経験は他にも活用できる筈なので、無駄じゃなかったと思い込んでいます。

アドオンでこういった類はあるみたいですが、自己流にアレンジしたい方には便利かなと思い、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などを用いる前提です。

ガントチャートに細かい変更を反映をしたり、コメントや進捗率を付けていくのはもう嫌です。。
進捗率に関しては単純作業や量的でしかあてになりませんし。。そういったタスクであれば付けても良いと思います。

また、タスクの階層も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から祝日を取得してきます(前年から翌年まで)。祝日以外を休日とする場合は、手入力で追加。(手入力の追加の後に祝日アップデートをすると上書きされてしまいます。祝日アップデートを実行後に追加してください。)

menuカスタムメニュー

メニューバーの一番右にガントチャートという独自メニューを追加しています。

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

ガントチャートメニュー

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

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

ondemand_video使い方の動画

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

おわりに

効率化で浮いた時間を別の仕事に割り当てるのはオススメしません。
ぜひ、コーヒーを飲むなり、ちょっと散歩に行くなど、浮いた時間を有意義に使って欲しいです。

普通の企業はちゃんとツールを導入するなどで、従業員の生産性を高めることをしていると思いますが、こうした「無料ツール&個人のITスキル」など個人の努力で効率化すると、労働力の搾取っぽい感じが気になりますね。

個人スキルに任せて仕事を増やされるだけではよくありません。生産性や効率化を求められる場合は、優れたツールを導入してもらうなど、きちんと上司に仕組みを整えてもらいましょう。