スポンサーリンク

マクロ(Excel VBA) 作業時間を計測し時間管理に繋げることができる ToDo リストの作成 ~その1~


日々の業務の中で、やることをリストアップする ToDo リストを使うことがあると思います。

リストアップした業務が終われば、チェックを付けて、まだ終わっていない業務が認識できるようにしておきます。
そうすることでやるべき業務を漏らすことがなくなり、また、時間が経つにつれだんだんと業務が減っていくことが確認できます。

さてこの ToDo リストに、1つ1つの業務にかかった時間を計測する機能を入れ込んだものを Excel で作成しましたので、作り方を紹介したいと思います。

マクロ(Excel VBA)を使っています。

*2017年9月29日追記

なお、こちらから ToDo リストをダウンロードできるようにしました ↓
是非ご活用下さい。

作業時間測定機能付 ToDo リスト.xlsm

ご意見ありましたらご連絡頂けると嬉しいです(^^)

スポンサーリンク

1、業務の作業時間を計測できる ToDo リストの仕組み

さて、業務の作業時間を計測できる ToDo リストは以下のようなものです。

普通の ToDo リストと同じようにやるべき業務をリストアップします。
1~10 まで10個リストアップできるようにしてあります。

作業時間計測の基本操作

やるべき業務をリストアップしたら、これから実際にこれらの業務を開始することになります。
上記の通り、業務にかかった作業時間を計測できるようにしてあります。

例えば、これから1番の「○○社 消費税不課税、非課税出し」の業務を行うとした場合を考えてみます。

まず開始する業務の番号(1番)横のオプションボタンを選択し、ToDoリストの上にある「スタート」ボタンをクリックします。
※「スタート」ボタンにはマクロが組み込んであります。

すると、該当する業務の「状態」蘭が「計測中」と表示されるようになり、また表の外の同じ行に計測を開始した時間が表示されます。

これで、業務の作業時間の計測がスタートしました。

ここから先は、「○○社 消費税不課税、非課税出し」の業務を普通に行います。

そして、この業務が終わったら ToDo リストの上にある「ストップ」ボタンをクリックします。
※「ストップ」ボタンにはマクロが組み込んであります。

すると、状態蘭の「計測中」の表示が消えて空白になり、表の外には計測を終了した時間が表示されます。

また、「作業時間」蘭には作業にかかった時間(=計測を終了した時間-計測を開始した時間)が表示されます。

完全にその業務が完了した場合には、「状態」蘭に「完了」と入力します。

一度手を付けた業務が完了する前に、他の業務に移った場合

さて、一度ある業務を開始してから完了する前に、他の業務に移る場合があると思います。

例えば、番号1の「○○社 消費税不課税、非課税出し」の業務を開始してから途中で中断し、番号2の「○○社 消費税申告書作成」を開始して、また途中で中断し番号1の業務に戻るような場合です。

番号1 開始→中断→番号2 開始→ 中断→番号1 開始

そのような場合には、一旦最初の業務の作業時間計測を停止して、他の業務の作業時間計測に移ります。

「状態」欄が「計測中」になっている業務がある場合には、他の番号のオプションボタンを選択することができなくしてあります。

したがって、番号1の業務が「計測中」の場合には、番号2のオプションボタンを選択して作業時間の計測を開始することはできません。

番号2を選択できるようにするためには、必ず「ストップ」ボタンで番号1の作業時間計測を終了しておかなければなりません。

番号1の作業時間計測を終了したら、「作業時間」欄に番号1の業務に関して作業にかかった時間(=計測を終了した時間-計測を開始した時間)が表示されるので、この状態で番号2のオプションボタンを選択します。

そして、今度は番号2の業務開始と同時に「スタート」ボタンをクリックし作業時間の計測を開始します。

番号2の業務を中断したら、「ストップ」ボタンをクリックします。
先と同様に、番号2の「作業時間」欄には作業にかかった時間が表示されます。

次に引き続き、番号1の業務を再開する場合には、番号1のオプションボタンを選択して「スタート」ボタンをクリックし、作業時間を計測します。

終了(又は中断)したら「ストップ」ボタンを押します。

すると、先に計測した作業時間と今計測した作業時間の累積が「作業時間」欄に表示されます。

また、表の外には計測をスタートした時間とストップした時間が表示されますが、これは直前の計測のみ(作業1の2回目の計測であって最初の計測は関係ない)の表示なので、累積時間とは関係ありません。

*表の外の時間は自分自身のプログラミングの動作確認用ですので、普段見るべきところではありません。普段見るべきところはあくまで表の中です。

このようにして、一旦作業を中断して他の業務に移った後に再度中断していた作業を再開した場合にも、1つの業務にかかった時間の累積を把握できるようにしています。

全ての業務の作業時間の合計

なお、表の下側には全ての業務の作業時間の合計が出るようになっています。

合計の計算には SUM 関数を使っています(セルG15に、「=SUM(G5:G14)」と入力してある)。

「リセット」ボタンと「全てリセット」ボタン

オプションボタンで業務の番号を選択して「リセット」ボタンを押せば、その業務についての作業時間などの記録がクリアされます。
「状態」欄が「計測中」の状態でクリックしても、そうでない状態でクリアしても同様にクリアされます。状態欄が「完了」であるの場合も同じです。

この「リセット」ボタンを使う機会は滅多にありませんが。

また、「全てリセット」ボタンを押せば、全ての業務の全ての項目がクリアされます。

「ToDo」欄に記載したやるべき業務も含めて全てがクリアされるので、新しく ToDo リストを作成する時(一日の業務が始まった時)に使います。

2、シート設計

さて、上記のような仕組みは、マクロ(Excel VBA)を使って作り上げています。

シート設計とプログラミングコードについて説明します。

表の作成

セル「C4~G14」に羅線を引いて表を作成します。
4行目に番号、ToDo、状態、作業時間の4つの項目を書きます。

「スタート」「ストップ」「リセット」「全てリセット」の4つのボタン

シート設計で重要な部分は、「スタート」「ストップ」「リセット」「全てリセット」の4つのボタンです。

これらのボタンは、タブの「開発」の「挿入」で ActiveX コントロールのコマンドボタン(□)を選択してシート上に挿入します。

挿入した直後は、このような↓四角形がコマンドボタンとして出てきます。

このコマンドボタンの表示を「スタート」などに変更します。

コマンドボタンを選択して、右クリックをして「プロパティ」を選択します。
次に Caption を選択して名前を変更すると、コマンドボタンの表示も変わります。

このように、コマンドボタンを挿入して4つのボタンを作ります。

これら4つのボタンには、クリックした時に動作するマクロを埋め込んであります(イベントプロシージャにコードを記述)。

オプションボタン

作業時間を計測する業務の番号を選択できるように、オプションボタンを設置してあります。

コマンドボタンと同様に、タブの「開発」の「挿入」で ActiveX コントロールのオプションボタン(⦿)を選択してシート上に挿入します。

オプションボタン右側の文字の表示は消してあります(ボタンのみで使用)。

オプションボタンを選択して、右クリックをして「プロパティ」を選択します。
次に Caption を選択して名前を消すと、表示も変わります(ボタンの横に何も表示されなくなる)。

このようにして、業務の数 1~10 まで10個分オプションボタンを設置します。

このオプションボタンは、どれか一つしか選択できません。
(同時に複数選択は不可能)

また、これらの10個のオプションボタンには、選択した時に動作するマクロを埋め込んであります。

デザインモード

一度シート上に挿入したコマンドボタン、オプションボタンを編集(大きさを変える、位置を変える、表示されている文字を変える など)するためには、タブの「開発」で「デザインモード」をオンにしなければなりません。オンにするとアイコンの色が変わります

普段この ToDo リストを使う際には、「デザインモード」はオフにしておきます。編集したい場合のみオンにします。

3、プログラミングコード(VBA)

Excel VBA によるプログラミングコードは、シートモジュールとブックモジュールの中に記述します。

・シートモジュールは「Sheet1(ToDoリスト)」
・ブックモジュールは「ThisWorkbook」

のように表記されています。

さて、全てのコードをモジュール別に示したいと思います。

シート上に配置したコマンドボタン、オプションボタンなどのオブジェクトを、デザインモードにした上でダブルクリックすると VBE のシートプロシージャが開きます。

コードは各オブジェクト(コマンドボタン、オプションボタン など)のイベントプロシージャの中に記述してあります。

CommandButton1 オブジェクト(「スタート」ボタン)の Click イベントプロシージャの中に書かれたコードであれば、CommandButton1 をクリックしたときに動作するマクロを構成していることになります。

画面上側で、該当するオブジェクト名とイベントプロシージャ名を選択して、コードを書き込みます。

コードを記述する際は、Private Sub プロシージャ内に記述することになります。
———————–
Private Sub CommandButton1_Click()
    処理
End Sub
———————–

各ボタンをクリックした際に実行するイベントプロシージャはこのように↓なっています。

シートモジュール「Sheet1(ToDoリスト)」内のプログラミングコード

冒頭部分にモジュール内変数(モジュール内のどのプロシージャでも共通に使える変数)を定義します。

「スタート」ボタンをクリックした際に動作するコードを CommandButton1_Click イベントプロシージャに記述します。

「ストップ」ボタンをクリックした際に動作するコードを CommandButton2_Click イベントプロシージャに記述します。

「リセット」ボタンをクリックした際に動作するコードを CommandButton3_Click イベントプロシージャに記述します。

「全てリセット」ボタンをクリックした際に動作するコードを CommandButton4_Click イベントプロシージャに記述します。

オプションボタン1(作業1を選択)をクリックした際に動作するコードを OptionButton1_Click イベントプロシージャに記述します。

オプションボタン2(作業2を選択)をクリックした際に動作するコードを OptionButton2_Click イベントプロシージャに記述します。

オプションボタン3(作業3を選択)をクリックした際に動作するコードを OptionButton3_Click イベントプロシージャに記述します。

オプションボタン4(作業4を選択)をクリックした際に動作するコードを OptionButton4_Click イベントプロシージャに記述します。

オプションボタン5(作業5を選択)をクリックした際に動作するコードを OptionButton5_Click イベントプロシージャに記述します。

オプションボタン6(作業6を選択)をクリックした際に動作するコードを OptionButton6_Click イベントプロシージャに記述します。

オプションボタン7(作業7を選択)をクリックした際に動作するコードを OptionButton7_Click イベントプロシージャに記述します。

オプションボタン8(作業8を選択)をクリックした際に動作するコードを OptionButton8_Click イベントプロシージャに記述します。

オプションボタン9(作業9を選択)をクリックした際に動作するコードを OptionButton9_Click イベントプロシージャに記述します。

オプションボタン10(作業10を選択)をクリックした際に動作するコードを OptionButton10_Click イベントプロシージャに記述します。

ブックモジュール「ThisWorkbook」内のプログラミングコード

ワークブックを開いた際に動作するコードを Workbook_Open イベントプロシージャに記述します。

ワークブックを閉じる際に動作するコードを Workbook_Open イベントプロシージャに記述します。

4、まとめ

業務の作業時間が計測できる ToDo リストの作成について説明しました。

ToDo リストは通常、やるべき業務のみをリストアップする形のものが多いですが、作業時間を計測できるようにすることで有用性が変わってくると思います。

作業にかかった時間を把握することにより、時間管理に繋げることができるでしょう。
そして、時間管理ができるようになれば業務改善に繋がります。

なお、今回の記事では業務の作業時間をどのように計測するかの操作方法と、シート設計についての説明が中心で、コード(Excel VBA)についての詳細な説明はしていません。

*2017年9月29日追記
コードについての詳細な説明は、こちらの記事に書きました↓

また、ToDo リストをダウンロードできるようにしました ↓
是非ご活用下さい。

作業時間測定機能付 ToDo リスト.xlsm

ご意見ありましたらご連絡頂けると嬉しいです(^^)