会社で終わらない残業に疲弊しているという状況はないですか?
普段の生活でもなんとなくダラダラ過ごしていたり、1日中、家事ややることに追われてしまっている、なんてことはないですか?
そんな状況を打開する方法として、「タイムトラッキングツール」を使った時間分析があります。作業にかかった時間や、何をして過ごしたかを記録し、より有効に使うのです。
この「タイムトラッキングツール」ですが、エクセルのマクロVBAを使用して作成が可能です。
この記事ではマクロVBAを利用したタイムトラッキングツールの作り方を解説していきたいと思います。
時間を記録することの重要性
仕事にかかる時間 分かっていますか?

自分やチームの仕事にかかる時間がどれくらいか分かっていますか?また、そのかかる時間をもとにきちんと仕事時間の見積を行うことができていますか?
おそらくほとんどの人ができていないし、分からないまま仕事をしているのではないでしょうか。
工場でひたすら同じ作業を繰り返す人、ひたすら図面を描き続ける人、といったシングルタスクを行う場合は簡単に把握できるでしょう。
単純に1日の達成数があれば 達成数/労働時間 で簡易的に計算できます。
しかし、マルチタスクで複数の仕事を同時並行で進める仕事では、仕事時間の把握は難しくなります。
自分のペースでそれぞれの仕事をこなすだけなら把握しやすいですが、チーム内外・取引先とのやりとりが多い仕事の場合、干渉が多く自分の仕事に集中する時間があまり持てないはずです。
電話、メール、打ち合わせ、突発のトラブルなどが発生し、それぞれの仕事が細切れになってしまいます。そうなると1つの仕事にかかる時間というのは読みづらくなってきます。
試しに、これから取り組もうとしている仕事について、事前にこれくらいかかるだろうと想像で見積もりをたて、ストップウォッチなどで時間を測りながら行ってみてください。
実際の仕事時間はほぼ確実に頭でイメージした数字を上回ると思います。私がやってみたところどの仕事も2倍以上はかかっていました。
この状態で仕事をしていると、頭ではこれくらいで終わる、と考えているのに実際には2倍以上の時間がかかるわけですから、できる以上の仕事を詰め込んでしまい常に時間は足りなくなります。
貯金をしたいなら家計簿をつけよう

残業を減らしたい、仕事にかける時間を減らしたい、と考えているのに長時間労働を繰り返すのは、貯金をしたいと考えるのになんとなく浪費をしてしまい、貯金ができない状況に似ています。
無計画に浪費を続けてしまい、気がつくと財布の中身が0になっているという状況です。
貯金をしたい、と思ったときに行うのはなんでしょう?
一つあげられることとして、家計簿をつけることがあります。
家計の支出の記録をとり、問題を見つけ出して対策をうつのです。各項目につき予算を決め、それ以内に収まるよう工夫します。
仕事でも同じことが言えます。まずは自分の仕事時間がどのように使われているか、それぞれの仕事にどれくらいの時間がかかるかを把握するのです。
仕事にかける時間を減らしたいと考えるのに、時間の記録をとらないのは家計簿をつけずに貯金をしようと考えていることになります。
時間管理の重要性はドラッカーも説いている

経営の神様、ピーター・F・ドラッカーも著書「経営者の条件」の中で時間管理の重要性を説いています。
成果をあげる者は仕事からスタートしない。時間からスタートする。計画からもスタートしない。時間が何にとられているかを明らかにすることからスタートする。
・時間は、借りたり、雇ったり、買ったりして増やすことができない。
・時間は常に著しく不足する。
・時間にはその代わりになるものがない。
時間を管理するには、まず自らの時間をどのように使っているかを知らなければならない。
組織が大きくなるほど、実際に使える時間は少なくなる。自らの時間がどのように使われているかを知り、自由にできるわずかな時間を管理することがそれだけ重要になる。
ドラッカーは時間をどのように使っているかを知り、時間の管理に取り組むには、まず時間を記録する必要があると主張しています。
そして、大切なのは記憶によってあとで記録することではなく、リアルタイムに記録することであると説いています。
記憶に頼った方法だとどうしても自分の意思が介入し正確なデータがとれないからです。
エクセルでタイムトラッキングツールを作る利点
エクセルでタイムトラッキングツールを作る利点としては以下のものがあります。
- エクセルさえあれば使用可能
- 操作が簡単
- データの利用がしやすい
パソコンを持っている人はかなり高確率でエクセルがインストールされているんじゃないでしょうか。
2017年のデータでは、会社でのエクセルの使用率は99.4%にも上ります。
タイムトラッキングツールを部署や会社全体に配布すれば、誰でも使用可能であるうえ、データをまとめれば組織単位で何にどれくらいの時間を費やしているかが分かります。
タイムトラッキングツールの概要
タイムトラッキングツールで見えるようにすることは、何にどれくらいの時間を使ったかです。
したがって最終的には
家計簿のように食費 ○円、住居費 ○円、日用品 ○円、、、
というふうに、仕事A ○時間○分、仕事B ○時間○分、仕事C ○時間○分、、、
といった表示がさせたいです。
まず仕事と開始時刻、終了時刻を記録する時間記録シートを作ります。仕事中にこの表に仕事内容を記録していきます。

このままでは仕事ごとに何時間使ったというのは分からないので、後々仕事ごとにまとめていきます。
今回の記事ではこの時間記録シートを作るところまでを解説します。
この表への入力自体は別にマクロVBAを使用しなくても入力可能です。仕事をするごとに「仕事内容」「開始時刻」「終了時刻」を記入していけばいいのです。
しかし、仕事中に入力するのは手間がかかるので継続は難しいでしょう。
この入力作業をいかにマクロVBAで簡単にするかです。
まず仕事内容については手動で毎回入力します。開始時刻と終了時刻はVBAを使い入力します。
前準備
VBAの初期設定はこちらの記事を読んでください。
前準備として表の書式設定を行っておきます。
書式もVBAで設定することができますが、毎回変わるものではないのであらかじめ入力しておいたほうが楽です。
開始時刻、終了時刻、時間の書式設定・数式
開始時刻(B列)、終了時刻(C列)
ユーザー定義→「yyyy/m/d h:mm」
時間(D列)
ユーザー定義→「[h]”h” mm”m”」
時間の列については「=終了時刻 – 開始時刻」の数式を入力しておきます。
D2セルだと「=C2-B2」です。これを表の一番下までオートフィルしておきましょう。
開始ボタン、切替ボタン
「開始」ボタンと「切替」ボタンを用意しました。

このボタンを押すことによって開始時刻、終了時刻を入力していきます。
それぞれのボタンにあたるVBAコードを買いていきます。
VBAコード解説
開始ボタン
開始ボタンでは、開始時刻に現在時刻を入力します。
以下の手順です。
- B列の最終行の1列下を定義する
- セルに現在時刻を入力する
B列の最終行の1列下を定義する
VBAにおいてY列の最終行の行数は以下の表現で表します。
Cells(Rows.Count, Y).End(xlUp).Row
一つずつ説明していきます。
Cells(Rows.Count, Y)
Cells(X, Y) はX行目、Y列目のセルを意味します。Cells(1,1)はA1セル、Cells(3,5)はE3セルです。
Rows.Countはエクセルシートの行数を示します。Excel2007以降は1048576です。
したがってCells(Rows.Count, Y)はY列の一番下のセルです。Cells(1048576,Y)を意味しています。
End(xlUp)はCtrl + ↑ (Macは Command + ↑)のショートカットキーです。
End(xlDown)でCtrl + ↓、End(xlToLeft)でCtrl + ←、End(xlToRight)でCtrl + →です。
Cells(Rows.Count, Y).End(xlUp)というのはCells(Rows.Count, Y)のセルを選択した状態でCtrl + ↑を押したことになります。
そうするとY列目の入力されたセルの最終行のセルを選択します。
最後にRowは、オブジェクトの行インデックスを示します。Cells(3,5).Rowsでは3行目・5列目セル(E3セル)の行数を示すため3です。
Cells(Rows.Count, Y).End(xlUp).RowはCells(Rows.Count, Y)を選択し、Ctrl + ↑を押して移動したセルの行番号 という意味になります。
ここで注意したいのは、Cells(Rows.Count, Y).End(xlUp).Rowはセル自体ではなくセルの行番号を表す数値です。
上の例でB列の最終行の番号を示したい場合は
Cells(Rows.Count, 2).End(xlUp).Row
と表現します。
わかりやすくするために、この数字をLastRowとします。
1 2 |
Dim LastRow As Long LastRow = Cells(Rows.Count, 2).End(xlUp).Row |
Dimは変数を定義するときに使います。VBAでは変数を使用する際に、Dimを使って定義します。
上の表のケースだとLastRow = 6です。
B列の最終行のセルはCells(LastRow, 2)ですので、B列の最終行の1列下のセルはCells(LastRow+1, 2)となります。
セルに現在時刻を入力する
セルに現在時刻を入れるのは以下のコードです。
1 |
Cells(LastRow + 1, 2) = Now |
Nowは関数で現在の日時を返します。
関連するものとして 日付を取得するにはDate関数、時刻を取得するにはTime関数です。
開始ボタンのコード
以上をまとめるとコードは以下のとおりになります。
1 2 3 4 5 6 |
Sub 開始() Dim LastRow As Long LastRow = Cells(Rows.Count, 2).End(xlUp).Row Cells(LastRow + 1, 2) = Now End Sub |

切替ボタン
切替ボタンでは、終了時刻に現在時刻を入力します。さらに次の仕事の開始時刻も入力します。
以下の手順です。
- C列の最終行の1列下を定義する
- セルに現在時刻を入力する
- B列の最終行の1列下にも現在時刻を入力する
C列の最終行の1列下を定義する
これについては開始ボタンの①B列の最終行の1列下を定義するで解説した内容の復習です。
開始ボタンはB列、切替ボタンはC列ですので、列番号が2→3に変わります。自分でやってみましょう。
セルに現在時刻を入力する
これも開始ボタンの②セルに現在時刻を入力するで解説した内容の復習です。
こちらについては全く同じです。
ここまでの時点でコードは以下のようになっています。
1 2 3 4 |
Dim LastRow As Long LastRow = Cells(Rows.Count, 3).End(xlUp).Row Cells(LastRow + 1, 3) = Now |

B列の最終行の1列下にも現在時刻を入力する
②までの終了時刻に現在時刻を入力するだけでも切替ボタンの役割は果たしています。
しかし、今の状態だと仕事の切り替わりのタイミングで「切替」ボタン、「開始」ボタンの両方を押さなければなりません。
メール処理が終わったあと、A社打ち合わせに入るタイミングで
「切替」ボタンでメール処理の終了時刻を入力し、「開始」ボタンでA社打ち合わせの開始時刻を入力する、という手順です。
これでは少々面倒です。実際の仕事場面では、仕事の切り替わりで時間が空くということはあまりありません。
それなら「切替」ボタンで終了時刻を入力すると同時に、次の仕事の開始時刻も入力してしまったほうがいいでしょう。
今までどおりのやり方でいくと、最終行+1のセルにNow関数で現在時刻を入力していくことになりますが、少し違うやり方でやってみます。
B列の最終行+1のセルに下の図のように「=終了時刻セル」の数式を入力します。

この方法だと、あとから時刻を調整しようとしたときに終了時刻だけ変更すればいいというメリットがあります。
やろうとしていることはB列の最終行+1のセルに「=行番号-1、列番号+1のセル」という数式を入れることです。単純にB8セルに「=C7」という数式を入れる方法はこうです。
1 |
Cells(8, 2) = "=C7" |
もちろんこのままではどのセルも「=C7」になってしまいます。
「=行番号-1、列番号+1のセル」とするためにはFormulaR1C1関数を使います。
Cells(X, Y).FormulaR1C1 = “=R[a]C[b]”
と表現すると、Cells(X, Y)のセルに「=Cells(X+a, Y+b)」という数式を入力することができます。Cells(X, Y)に対して、行数を+a、列数を+bします。今回のケースでは「=行番号-1、列番号+1のセル」ですので
Cells(X, Y).FormulaR1C1 = “=R[-1]C[1]”
となります。
②セルに現在時刻を入力するの時点でCells(LastRow + 1, 3)に現在時刻を入力していますので、次の仕事の開始時刻はCells(LastRow + 2, 2)に入力します。
1 |
Cells(LastRow + 2, 2).FormulaR1C1 = "=R[-1]C[1]" |
切替ボタンのVBAコード
以上をまとめるとコードは以下のとおりになります。
1 2 3 4 5 6 7 |
Sub 切替() Dim LastRow As Long LastRow = Cells(Rows.Count, 3).End(xlUp).Row Cells(LastRow + 1, 3) = Now Cells(LastRow + 2, 2).FormulaR1C1 = "=R[-1]C[1]" End Sub |

時間記録シート完成
以上で時間記録シートは完成です。
これにより、やったことを時系列で記録する、ということはできるようになりました。
(仕事内容は自分で入力する必要があります。)
最初に述べたとおり、時間記録シートは全て手入力でもつけることが可能です。しかし、VBAを使用することにより大幅に手間を削減できます。
こういった記録を続けられるかどうかは、1回1回の手間をどこまで削減できるかが重要です。
次回は時間記録シートの内容を仕事ごとにまとめる方法について書きたいと思います。

コメント