ExcelのVBAを使用してプロジェクトの更新トラッカーを作成する

ExcelのVBAで更新トラッカーを作成する

Excelでプロジェクトの更新を追跡し、ログに記録するための3つの簡単な手順

多くの場合、私たちは仕事で複数のプロジェクトに関与しています。各プロジェクトにはいくつかのタスクまたはサブタスクが含まれています。これらのタスクとプロジェクトのステータスを追跡し、プロジェクト管理のために記録することは良い習慣です。これらのプロジェクトのタスクまたは更新は、私たちの知識を活用するためだけでなく、プロジェクトのミーティング中に情報を共有するためにも使用できます。市場にはさまざまな無料または商用のプロジェクト管理ツールがありますが、私はVisual Basic Applications(VBA)を使用して自分用のシンプルなExcelベースのツールを作成したかったのです。

VBAの機能は非常に広範です。データ処理、データ分析、データ可視化の自動化に使用することができます。これにより、Excel内で大規模なデータセットを扱うことが非常に便利になります。VBAに関しては、Pythonの異なるパッケージとは異なり、VBAのコードベースは定期的に更新されません。これは異なる文脈でメリットとデメリットの両方と見なすことができます。ただし、VBAを学習すると、同じ知識を将来に活用することができます。VBAの新しいバージョンや新機能に常にアップデートする必要はありません。なぜなら、それらは存在しないからです(Microsoftが新しい機能を導入することを決定しない限り)。

以前の投稿の1つで、VBAを時系列リサンプリングに使用しました。

Excel VBAを介してPythonを実行する-時系列リサンプリングのケース

VBAを使用して太陽光線の時系列リサンプリングを包括的に評価する- Pythonを使用して、Pythonを介して…

towardsdatascience.com

この投稿では、Excelで自分用のシンプルなプロジェクト更新トラッカーツールを作成する方法を共有します。3つの簡単な手順で始めましょう。

Brands&Peopleによるイメージ。Unsplashで利用可能です。

目的

プロジェクトの更新を追跡してログに記録するアプリケーションを作成することを目指しました。各タスクごとに新しい更新を入力するシートが1つありたかったです。また、この情報をファイルに記録した時間を追跡したかったです。ボタンをクリックするだけで、新しい更新ごとに記録された時間と共に別のシートに移動し、情報をログに記録することができるようにしたかったです。

このために、2つの異なるシートを持つExcelファイルを作成しました。最初のシートはProjectTasksTrackerと呼ばれ、2番目のシートはLogbookと呼ばれています。これらのシートは、DateTime、Project、Tasks、Responsible Staff、Status、Updatesの6つの列を含む同じヘッダー行で構成されています。

DateTime列にはExcelの=NOW()関数を使用して実際の時間を取得しました。Status列のドロップダウンメニューでは、Started、In Progress、Completeの3つのオプションを許可しました。また、Update Logbookという名前のボタンを作成し、情報をLogbookシートに重複なく自動的に記録することができるようにしました。ProjectTasksTrackerシートは以下のようになります:

ProjectTasksTrackerシートの構造。著者によるイラスト。

コーディング手順

VBAのモジュール内にサブルーチンを作成することから始めました。

  1. 最初のステップでは、ファイルのためのワークブックオブジェクトwbと、ProjectTasksTrackerシートとLogbookシートのための2つのワークシートオブジェクトws1ws2を定義しました。以下にコードを示します:
'Define workbook and two worksheets.Dim wb As WorkbookDim ws1 As Worksheet 'Project tracker worksheetDim ws2 As Worksheet 'Logbook worksheetSet wb = ThisWorkbookSet ws1 = ThisWorkbook.Sheets("ProjectTasksTracker")Set ws2 = ThisWorkbook.Sheets("Logbook")

2. 第二のステップでは、2つのシートの行数と列数をカウントするためのコードを記述しました。これは手動でも行うことができますが、プロジェクトの更新を入力する間に行数が変わる可能性があるため、このプロセスは更新されます。列数は固定されています(6)ので、2つのシートの構造を一貫させるために保持されます。ただし、デモンストレーションの目的でコード化されています。

以下のコードスニペットでは、lr1はワークシートws1の列Aに基づいて行数をカウントし、lc1は同じワークシートの行1に基づいて列数をカウントします。

'Count the number of rows and columns in ProjectTasksTracker sheetDim lr1, lc1 As Integerlr1 = ws1.Cells(Rows.Count, “A”).End(xlUp).Row lc1 = ws1.Cells(1, Columns.Count).End(xlToLeft).Column 

注意: マクロを使用する場合、特定のセルへの参照を使用することができます。これは、変更の可能性があるデータセットで作業する際に便利です。たとえば、名前付き範囲Updatesを作成して、ProjectTasksTrackerシートのセルF1を参照しました。その前に1つの列が追加された場合、UpdatesはセルG1を参照するようになります。

コードでは、Updates名前付き範囲は以下のようにupdate_cellで参照されます。それが属する列番号はupdate_columnで参照され、アルファベットでの列番号はupdate_colによって与えられます。

Dim update_cell As RangeSet update_cell = ws1.Range(“Updates”)Dim update_column As Integerupdate_column = update_cell.ColumnDim update_col As Stringupdate_col = Chr(update_column + 64)MsgBox "Update column belongs to: Column " & update_col
MsgBox to display location reference of Updates based on the code above. Illustration by Author.

次のステップのコードでは、便宜のために列番号6でUpdates列を直接参照します。

3. このプロセスで最も重要なのは、第3のステップです。このステップでは、ProjectTasksTrackerシートの各行(ヘッダ行と日時列を除く)をループ処理し、次の操作を行いました。

a. ProjectTasksTrackerシートの各行について、各タスクごとにUpdates列が空であるかどうかをチェックしました。特定の行がProjectTasksTrackerシートで更新がある場合、Logbookシートの行数をカウントし、lr2という整数として割り当てました。さらに、valuesMatchというブール型の変数を宣言し、デフォルトでFalseにしました。

b. 次に、ネストされたループを作成し、Logbookシートの各行をループ処理し、ProjectTasksTrackerシートの各列の内容(範囲rg1として定義)がLogbookシートの任意の行の各列の内容(範囲rg2として定義)と一致するかどうかをチェックしました。 rg1rg2の間に一致がない場合、これはProjectTasksTrackerシートの特定の行の更新がLogbookシートにログインされていないことを意味します。 valuesMatchはFalseのままです。 ProjectTasksTrackerシートの行の内容がLogbookシートの任意の行と一致した場合、その行は既にログインされていることを意味します。その場合、valuesMatchの値はTrueに変更されます。

c. 両方のforループの最後にvaluesMatchがTrueである場合、それ以上の処理は行われません。両方のforループの最後にvaluesMatchがFalseである場合、ProjectTasksTrackerシートの行(日時列を含む)がLogbookシートにコピーされ、貼り付けられます。

ステップ3a、b、cは以下のgistにコード化されています:

デモンストレーション

以下のプロットは、8/20/2023 23:32時点のProjectTasksTrackerシートの更新を示しています。

8/29/2023時点のProjectTasksTrackerシートの初期ビュー。作成者によるイラスト。

これらの更新は、8/20/2023自体にLogbookシートにログインされています。

8/20/2023までのLogbookシートの更新。作成者によるイラスト。

次に、8/29/2023 23:38に、ProjectTasksTrackerシートで赤色で強調されている変更を行いました(最初の2行に変更を加え、最後の行を追加しました)。その後、Coding Stepsセクションに説明されているマクロに割り当てられた「Update Logbook」ボタンをクリックしました。

8/29/2023時点でのProjectTasksTrackerシートでの変更。作成者によるイラスト。

これらの新しい変更は、Logbookシートにログインされます。赤色でハイライトされた下部の行は、8/29/2023に行われた変更です。以前にログインされた他の更新は同じままです。

新しい更新はLogbookシートにログインされます。以前の更新は同じままです。

結論

この記事では、プロジェクトタスクの更新を入力し、ログインするための簡単なExcelトラッカーを作成するためのいくつかのコーディングステップについて説明しました。もしProjectTasksTrackerシートに変更や追加が行われ、マクロが実行されると、それらの更新がLogbookシートにコピー&ペーストされます。しかし、ProjectTasksTrackerに変更がない場合、ボタンをクリックした後、更新は両方のシートで同じままです。

また、Logbookシートの行を特定の順序で並べ替えるなど、追加の機能を作成することも可能です。また、プロジェクトの更新をログインするために別のシートではなく、新しいファイルを作成することも可能です。その場合、コードでワークブックとワークシートの宛先を再定義する必要があります。これらのステップは、この記事ではシンプルにするために含まれていません。この記事で使用されたコードとマクロが有効化されたExcelファイルは、このGitHubリポジトリで利用可能です。読んでいただきありがとうございました!

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more