【事例から学ぶ】工数管理ツールを自作する方法とメリット・デメリット

【事例から学ぶ】工数管理ツールを自作する方法とメリット・デメリット

工数管理ツールは、ExcelやGoogleスプレッドシートなどの代表的なツールがあれば簡単に自作できます。近年では、生成AIに指示を出せば、関数やマクロの知識がなくても、集計の自動化まで含めて組めるようになりました。

一方で、自作の検討でつまずきやすいのは、作る工程そのものではありません。この記事では自作の手順とAIへの具体的な指示の出し方を示したうえで、作ったあとに必要になる作業まで含めてコストを整理します。

工数管理を自作ツールで行う重要性

自作ツールが選ばれる理由

工数管理を自作で始める判断には、はっきりした理由があります。ひとつは費用です。ExcelやGoogleスプレッドシートはすでに社内にあるため、新しい月額費用が発生しません。次に自由度です。管理したい項目が自社独自のものでも、列を足すだけで対応できます。そして操作の慣れです。表計算ソフトなら、あらためて使い方を覚えてもらう必要がありません。

見落とされやすいのは、作る難易度ではない

ただし、自作の検討で判断を分けるのは、作れるかどうかではありません。作った表への入力が、現場で続くかどうかです。

生成AIで作る部分の難易度は下がりました。しかし管理項目を決める作業、現場に配って説明する作業、入力が止まった人に声をかけ続ける作業は、AIが代わりにやってくれるわけではありません。

なお、工数管理そのものの進め方は別の記事で扱っています。

工数管理ツールを自作する5つの手順

ホワイトボードに業務のフロー図を書き出している様子

Excelやスプレッドシートで工数管理表を作る場合、大きく5つの工程を踏みます。

  1. プロジェクトを大・中・小のカテゴリに分類する(WBS) — 管理したい単位まで作業を分解します。ここで決めた粒度が、あとから見られる集計の細かさを決めます。
  2. タスクを洗い出して担当者を割り当てる — 分解したタスクに担当者を紐づけます。
  3. 開始日・終了日・予定工数の欄を作る — 日付と予定の工数を入れる列を用意します。
  4. 進捗ステータスと実績工数の欄を作る — 実際にかかった時間と、いまの状態を記録する列を足します。
  5. 横軸に日付を置き、ガントチャートと集計式を作る — 日付を横に並べて期間を可視化し、合計を出す数式を組みます。

具体的な作り方は別の記事で解説しています。ここから先は、AIを使って作る方法に進みます。

AIを活用して自作ツールを作成する方法

パソコンの画面で数式やコードを扱っている様子

ここからが本題です。ChatGPTやClaudeなどの生成AIを使えば、関数やプログラムの知識がなくても、工数管理表の集計部分を組み立てられます。

以下では、実際にAIへ投げた指示と、返ってきた数式・コードをそのまま掲載します。数式は次の列構成を前提にしています。

列 内容
A タスク名
B 担当者
C 開始日
D 終了日
E 予定工数(時間)
F 実績工数(時間)
G ステータス(未着手/進行中/完了)

ChatGPT等の生成AIを活用した関数・VBA(マクロ)の自動生成

AIに指示する前に決めておく4つのこと

AIに指示を出す前に、決めておいたほうがよいことが4つあります。ここを決めずに指示すると、AIは何らかの前提を置いて数式を作るため、あとから表を組み替えることになります。

  • 管理の粒度 — 集計したい単位から逆算して決めます。案件別に採算を見たいなら案件が最小単位、業務種別ごとの時間を見たいなら業務種別が最小単位になります。
  • 予定工数と実績工数のどちらを取るか — 両方取ると入力の手間が2倍になります。まず実績だけから始める選択もあります。
  • 進捗ステータスの数 — 3つ程度に抑えておくと更新が続きやすくなります。細かく分けるほど、更新されないまま放置される項目が増えます。
  • 集計軸 — 担当者別か、案件別か、月別か。ここを決めずに表を作ると、あとから列を足せなくなります。

AIに任せられる範囲と、任せられない範囲

AIに指示すれば、SUMIFSやINDEX/MATCHのような関数や、条件付き書式の数式が返ってきます。VBAやGAS(Google Apps Script)のコードも同じです。いずれも日本語で指示するだけで済みます。エラーが出たときも、エラー文をそのまま貼れば修正版が返ってきます。

一方で、上に挙げた4つの決定はAIには任せられません。自社が何を管理したいのかという判断だからです。表を配って説明する作業、入力が止まった人に声をかける作業も、AIの外側に残ります。

AIプロンプトを活用した集計自動化の具体例

例1:進捗率と遅延判定を自動で出す

指示した内容

Googleスプレッドシートで工数管理表を作っています。列は A=タスク名、B=担当者、C=開始日、D=終了日、E=予定工数(時間)、F=実績工数(時間)、G=ステータス(未着手/進行中/完了)です。2行目からデータが入ります。H列に進捗率、I列に遅延判定を出す数式を作ってください。遅延判定は、終了日を過ぎているのにステータスが完了になっていない場合と、実績工数が予定工数を超えている場合を分けて表示してください。

返ってきた数式

H2セル(進捗率)

=IFERROR($F2/$E2,"")

I2セル(判定)

=IF($E2="","",IF($G2="完了","完了",IF($F2>$E2,"工数超過",IF(AND($D2<>"",TODAY()>$D2),"遅延","進行中"))))

H列は表示形式をパーセンテージに設定し、あとは下の行にコピーします。判定は完了→工数超過→遅延→進行中の順に見ていく形です。

ひとつ補足すると、進捗率と判定は別の列に分けたほうが扱いやすくなります。1つのセルに数値と文字列を混在させると、並べ替えや絞り込みができなくなるためです。指示を出す時点で列を分けるよう伝えておくと、作り直しを避けられます。

なお、この数式には抜けがあります。ステータスが未着手の行も、判定には進行中と表示されます。分岐に未着手が入っていないためです。実績工数が空欄の行を作って初めて気づく種類の抜けで、数式を眺めているだけでは見つかりません。

最後の分岐を1つ足すと拾えるようになります。

=IF($E2="","",IF($G2="完了","完了",IF($F2>$E2,"工数超過",IF(AND($D2<>"",TODAY()>$D2),"遅延",IF($G2="未着手","未着手","進行中")))))

指示の出し方が悪かったわけではありません。未着手をどう扱うかを伝えていなかったので、AIは書かれていない条件を補わなかっただけです。この種の抜けを見つける方法は後述します。

例2:担当者別・月別の実績工数を集計する

指示した内容

同じ表で、担当者ごとの完了タスクの実績工数合計を出したいです。K列に担当者名を並べ、L列に合計を出す数式を教えてください。あわせて、M列に指定した月だけの合計を出す数式も教えてください。月はN1セルに月初の日付を入れます。

返ってきた数式

L2セル(担当者別の合計)

=SUMIFS($F:$F,$B:$B,$K2,$G:$G,"完了")

M2セル(指定した月の合計)

=SUMIFS($F:$F,$B:$B,$K2,$C:$C,">="&$N$1,$C:$C,"<="&EOMONTH($N$1,0))

ここで気をつけたいのは、月別の集計が開始日を基準にしている点です。3月に始まって4月に終わったタスクの実績工数は、すべて3月に計上されます。

月をまたぐタスクを正しく月次で見たい場合は、実績を記録した日付の列を別に持ち、その列を基準に集計する必要があります。冒頭で集計軸を決めておく必要があると書いたのは、こうした作り直しを避けるためです。

例3:ガントチャートに自動で色をつける

指示した内容

同じ表の右側、P列から横に日付を並べてガントチャートにしたいです。P1から右へ日付が入っています。各タスクの開始日から終了日までのセルに自動で色がつくようにしたいです。条件付き書式の数式を教えてください。

返ってきた数式

適用範囲を P2:BX200 に設定し、条件付き書式のカスタム数式に次を入れます。

=AND(P$1>=$C2,P$1<=$D2)

この数式は参照の書き方が結果を左右します。P$1 は行だけを固定、$C2 と $D2 は列だけを固定という形です。ここを $P$1 や C2 にすると、1行目だけ色がついたり、範囲全体が塗られたりします。

条件付き書式は結果を目で確認しづらいため、まず数行だけに適用して意図どおりか確かめてから、範囲を広げる手順が安全です。

例4:GASで集計結果を別シートに書き出す

指示した内容

Googleスプレッドシートで、タスク一覧シートにある各担当者の今日の実績工数を集計して、日次レポートシートの最終行に追記するGoogle Apps Scriptを書いてください。タスク一覧シートの列構成は A=タスク名、B=担当者、C=開始日、D=終了日、E=予定工数、F=実績工数、G=ステータス で、2行目からデータが入ります。

返ってきたコード

function reportDailyHours() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const src = ss.getSheetByName('タスク一覧');
  const dst = ss.getSheetByName('日次レポート');

  if (!src || !dst) throw new Error('シート名が一致していません(タスク一覧 / 日次レポート)');
  if (src.getLastRow() < 2) return;

  const tz = ss.getSpreadsheetTimeZone();
  const todayStr = Utilities.formatDate(new Date(), tz, 'yyyy-MM-dd');

  const values = src.getRange(2, 1, src.getLastRow() - 1, 7).getValues();
  const totals = {};
  values.forEach(row => {
    const owner = row[1];             // B列 担当者
    const start = new Date(row[2]);   // C列 開始日
    const actual = row[5];            // F列 実績工数
    if (!owner || isNaN(start.getTime())) return;
    if (Utilities.formatDate(start, tz, 'yyyy-MM-dd') !== todayStr) return;
    totals[owner] = (totals[owner] || 0) + Number(actual || 0);
  });

  const rows = Object.keys(totals).map(owner => [todayStr, owner, totals[owner]]);
  if (rows.length === 0) return;

  dst.getRange(dst.getLastRow() + 1, 1, rows.length, 3).setValues(rows);
}

スプレッドシートのメニューから拡張機能→Apps Scriptを開き、このコードを貼り付けて保存します。実行するとタスク一覧シートを読み、開始日が当日のタスクの実績工数を担当者ごとに合計して、日次レポートシートに追記します。

※ この表には作業した日付を記録する列がないため、当日の稼働時間そのものは集計できません。日単位で見る場合は、実績を記録した日付の列が必要です。

AIで作る際につまずくポイントと対処法

ここまでの例を踏まえて、AIに工数管理表を作らせるときに注意したい点をまとめます。

列の構成を先に伝える
列と、そこに入る値の型(日付か数値か文字列か)を最初に伝えます。伝えないとAIは一般的な構成を仮定して数式を作るため、自社の表に貼っても動きません。

エラー文はそのまま貼る
数式やコードがエラーになったら、表示されたエラー文をそのままコピーして貼れば、修正版が返ってきます。エラーの意味を自分で調べる必要はありません。

シート名やセル位置が前提として埋め込まれていることを意識する
生成されたコードや数式には、指示で伝えたシート名やセル位置がそのまま入っています。あとでシート名を変えたり、列を挿入して位置がずれると動きません。とくにシート名の不一致は、原因を指し示さないエラーで止まるため気づきにくい部分です。

そのまま貼る前に、数件のデータで動かす
数式は1行、条件付き書式は数行、コードは数件のデータで試してから範囲を広げてください。範囲を先に広げると、どこで意図と違ったのかが追えなくなります。とくにコードは、エラーも出ないまま何も起きないことがあります。日付の判定が通らず、全行が処理の対象から外れるようなケースです。そうなったときは、読み込んだ行数と条件に合った件数を表示させると、どこで対象が消えたのかが分かります。

必ず検算する
AIが返す数式は文法的には正しくても、集計の条件が意図とずれていることがあります。手計算できる小さなデータで合計を突き合わせるか、意図的に極端な値を入れて挙動を見る工程を入れてください。

有効なのは、起こりうる状態を1行ずつ用意したテスト用のデータを作ることです。完了・工数超過・期限切れ・未着手・予定工数0・終了日が空欄といった行を並べ、判定列の表示を1行ずつ確かめます。例1の数式が未着手を拾えないことも、未着手の行があって初めて見つかるものです。月をまたぐタスクを入れておけば、例2の集計が開始日基準になっている点も同時に確認できます。

共有したあとのファイルの扱いを決める
社内で共有すると、コピーが複製されて複数のファイルに分裂したり、編集権限を持つ人が数式のセルを上書きして壊れたりします。編集できる範囲を保護するか、入力用のシートと集計用のシートを分けるといった対応が必要になります。

工数管理ツールを自作する3つのメリット

自作には次のメリットがあります。それぞれ、成立する条件も添えます。

  1. 導入コスト・月額費用をゼロに抑えられる — 新しい契約が不要です。ただしこれは、作る人と運用する人の時間を費用に計上しない場合に成り立ちます。
  2. 自社独自の管理項目に合わせて自由にカスタマイズできる — 列を足せば対応できます。ただし自由に直せる状態が続くのは、作った人が在籍していて、手を入れる時間を確保できる間です。
  3. 既存の使い慣れた操作性でスモールスタートできる — 説明なしで使い始められます。ただし人数が少なく、管理項目が頻繁に変わらない場合に限られます。

いずれも、条件が満たされている限りは自作が合理的な選択になります。次の章では、この条件が崩れるとどこに負荷が出るのかを見ていきます。

工数管理ツールを自作・運用するデメリットと隠れた負荷

机に積み重なった書類の束

自作の負荷は、表を作る作業よりも、その前後に集中する傾向があります。以下の3つは、AIを使っても削れない部分です。

1. 要件定義・初期設計に時間と労力がかかる

何を管理項目にするかを決める作業です。案件別か業務種別か、どこまで細かく分けるか、予定と実績の両方を取るか。この判断は現場の入力量と、あとから見られるデータの粒度を同時に決めます。

しかも自分だけでは決められません。集計結果を使う人(経営や管理部門)と、入力する人(現場)の双方に確認が必要です。関係者への確認と合意まで含めると、半日で終わる話にはなりにくく、数日にわたることもあります。

2. オペレーションルールの策定とマニュアル作成の負荷

表ができたら、使い方のルールを決める必要があります。どのタイミングで入力するか、タスクが増えたときは誰が行を追加するか、月をまたぐタスクはどう扱うか、入力を忘れた日はどうするか。

こうした細部を決めずに配ると、人によって入力の仕方が変わり、集計が合わなくなります。ルールを決めたら、それを文書にして配る作業も必要です。表を作る時間より、この工程のほうが長くなることもあります。

3. 導入後のサポート対応と社員教育のコスト

配ったあとに、質問が集まります。どこに入力すればいいのか、この作業はどのカテゴリなのか、数字が合わないがどうすればいいのか。

人数が増えるほど問い合わせは増え、作った人に集まります。新しく入ったメンバーへの説明も、そのたびに必要です。ツールを作った人が、実質的にサポート窓口を兼ねる状態が続きます。

運用を続けた先に出てくる2つの問題

上の3つに加えて、運用を続けると次の問題が出てきます。

  • 継続的な保守管理と野良ツール化のリスク — 作った人が異動・退職すると、誰も直せないファイルが残ります。
  • 入力の手間による現場の形骸化 — ファイルを開いて入力する手間が積み重なり、まとめて後追いで入力されるようになると、データの精度が落ちます。

この2つは、Excelと自作ツールに共通して現れる限界として別の記事で詳しく扱っています。

事例から学ぶ!脱・自作ツールなら「TimeCrowd(タイムクラウド)」がおすすめな理由

複数人でパソコンを開いて打ち合わせをしている様子

前章で挙げた負荷は、いずれも人の時間を使う作業です。専用ツールを使う判断は、この時間を買い戻す判断だと言い換えられます。

工数管理ツール「TimeCrowd」は、タスクの開始と終了にワンクリックで打刻することで、誰がどの業務にどれだけ時間をかけているかを記録します。

【成果事例】案件ごとの稼働時間を見直して開発効率15%アップ

株式会社CloudQは、Webサービスの受託開発と自社開発を手がけています。会社全体の収支は管理していたものの、案件ごとの収支状況や、誰が何にどれだけ時間をかけているかは把握できていませんでした。

TimeCrowdを導入して稼働時間を記録したところ、タスクごとの稼働時間を見て想像以上に時間をかけているタスクがあったといいます。とくに会議では、時間を延長しているものやカレンダーに記載されていないものがあり、管理者側で把握できていない部分が多くあったとのことです。

同社では週に1回、打刻データをもとにメンバーへ時間の使い方をフィードバックしています。こうした見直しの結果、会社全体の開発効率が15%改善しました。

スタートボタンを押すだけのワンタップ入力で現場の負担を最小化

入力はタスクの開始時と終了時にワンクリックするだけです。ファイルを開いて該当の行を探し、数値を打ち込む手順が不要になります。操作が1動作で完結するため、マニュアルで説明すべき内容と、そこから生まれる問い合わせも少なくなります。

リアルタイムで誰が何をしているか可視化・自動集計

打刻したデータは自動で集計され、メンバー別・タスク別・カテゴリー別に確認できます。集計用の数式を組む作業と、月末にファイルを集めて合算する作業がなくなります。

CloudQの事例では、会議をコミュニケーション目的のものと案件業務のものに分けて打刻すれば、案件ごとの収支項目に含めずに集計できると述べられています。自作の表なら列の追加と数式の修正が必要になる部分です。

保守管理・マニュアル作成不要でスムーズな社内定着を実現

SaaSなので、OSやブラウザの更新に合わせて自分で手を入れる必要がありません。担当者が異動しても、直せる人がいなくなってファイルが止まる状況は起きません。

前章で挙げた負荷のうち、ルール策定・マニュアル作成・サポート対応・保守管理は削れる部分にあたります。残るのは、自社が何を見たいかを決める判断だけです。

まとめ:自作ツールとSaaSのコストパフォーマンスを比較して最適な選択を

工数管理ツールの自作は、生成AIを使えば以前より現実的な選択になりました。そのうえで判断を分けるのは、次の3点です。

  • 人数 — 入力する人が増えるほど、ルールの徹底とサポート対応の負荷が増えます。
  • 管理項目の変更頻度 — 項目が頻繁に変わるなら、そのたびに表と数式に手を入れる時間が必要になります。
  • 作った人の在籍見込み — 作った人が抜けたあとに直せる人がいるかどうかで、ファイルの寿命が決まります。

自作にかかるコストは、月額費用ではなく人の時間で発生します。要件定義からサポート対応までにどれだけの時間を使うかを見積もり、自社の人件費単価を掛けてみると、専用ツールの月額費用と同じ単位で比較できます。

Excelを使い続ける業務と、ツールに任せる業務の線引きについては、資料にまとめました。

時間管理ツール「TimeCrowd」の資料をダウンロード TimeCrowdの無料トライアルに申し込む