プロジェクトが多すぎて、誰が何を担当しているか追跡できませんか?
プロジェクトが多すぎると、担当者が抱える案件数を数えるのも大変です。
そこで、マクロを利用して、1 人あたりの案件数を自動的にカウントできるようにしたいと思います。
マクロの作成
開発タブからVisual Basicをクリックします。
挿入から標準モデュールを選択し、こちらにコードを書いていきます。
まず、CountPersons_SelectOutputCellという名称でマクロを定義しています。
変数の定義
次にDimで7つの変数を定義しています。
① Dim ws As Worksheet
wsという名前で、作業するシートを定義しています。
②Dim dict As Object
dictという変数を定義しています。
後ほどのコードで、dictには、辞書型オブジェクトを代入しています。
辞書は、担当者名(キー):件数(値)という構造を持ちます。
③ Dim lastRow As Long
指定する列の「データがある最終行」をいれるためにlastRowという変数を定義していています。
エクエルの行は最大でかなりの行があるため、Longという大きな整数用の型として定義しています。
④Dim i As Long
行番号として使うカウンタ変数 i を定義しています。
⑤ Dim startCell As Range
startCell という名前の Range 型の変数を宣言しており、後でユーザーが選択したセルを代入して使うためのものです。
⑥Dim key As Variant
辞書に格納されているキーを受け取るための変数keyを定義しています。
辞書のキーは、担当者名を示し、dict(key)は、その担当者がかかえる件数を表します。
Variantは、文字列、数値など、何でも受け入れられるようにするための柔軟な型です。
⑦Dim msg As String
文字列を入れるための変数msgを定義しています。
オブジェクトを変数に代入
①Set ws =ActiveSheet
現在開いているシートをwsという変数に代入しています。
wsという変数にいれておくことで、ws.Cellsや、ws.Rowsといった書き方ができるようになります。
②Set dict = CreateObject("Scripting.Dictionary")
Dictionaryは、キー(名前)、値(データ)という辞書型のデータ構造です。
CreateObjectで、辞書型オブジェクトを作成し、変数dictに代入しています。
出力開始セルの選択
担当者ごとの案件数を出力するセルを指定してくださいと、メッセージを表示させています。
InputBoxの引数に、事前に定義したmsgを渡すことで、「出力を開始するセルをクリックして選択してください」というメッセージ付きのダイアログを表示させています。
ユーザーが選択したセルは、startCellに格納され、以降の集計結果を出力する開始位置として使用されます。
出力をキャンセルした時の処理
Escキーを押すなどして出力先のセルを選択しなかった時は、startCellにNothingが代入されます。
この条件をif文で判定し、該当する場合は、「処理を中止しました」というメッセージを表示し、Exit Subによってマクロの実行を終了します。
End ifは、if文の終了を示しています。
【担当者が入力されて最終行を取得~】