VBAの練習4

使用するデータは A-003 です。

課 題

B列の機種名を重複しないようにJ列に機種名の一覧を作成して下さい。
合わせてK列に台数を表示させて下さい。

ヒント
For i = 2 to 201 を使い、それぞれの行の機種がJ列に存在するかチェックをします。
チェックを行う方法は複数ありますがエクセルの便利テクニックを使ってみます。
Excel VBAではワークシート関数を呼び出すことができます。
VBAからワークシート関数を使用するにはWorksheetFunctionを使います。
今回COUNTIF関数を使います。
  WorksheetFunction.CountIf(範囲,検索条件)
WorksheetFunctionでは引数に範囲を指定する場合は「Range」を使用する必要があります。
J列に機種名が登録されているか(機種名の個数がゼロ)判断するので
WorksheetFunction.CountIf(Range(“J:J”), 機種名) となります。

解 答

解 説

今回初めて 文字列型変数 String を使用します。

変数を使用しなくてもコードを書くことは出来ます。
使用していないのが以下になります。

機種名を格納する変数 KisyuName が Cells(i, “B”).Value に変わっただけです。
解答の分と見比べて 文字列変数を使っていない方がゴチャゴチャした感じに見えます。
変数を使用するとスッキリします。スッキリすると可読性が上がります。

If WorksheetFunction.CountIf(Range(“J:J”), KisyuName) = 0 Then の解説です。
Ifステートメントで まず2行目の機種名がJ列に存在しているか確認しています。
確認方法は COUNTIF関数で範囲内に検索条件(機種名)の個数を取得しています。
未登録の場合 0、登録済の場合 1 となります。
機種名の個数が0の場合 機種名をJ列に 台数をK列 に入力しています。
台数の取得方法も WorksheetFunction.CountIf(Range(“B:B”), KisyuName) とWorksheetFunctionを使っています。

台数の取得方法についてです。
2行目から201行目まで条件に一致する機種名があるのか For~Nextステートメントを使う方法もあります。
その方法が下になります。

cntというカウント用の変数を用意して機種名に一致する場合 cnt = cnt + 1 として台数を取得しています。
取得した後に cnt(設置台数)をK列に入力しています。

今回の課題ではどちらでやっても瞬時に機種一覧が作成されます。
しかし、実務では複数店舗、複数の日数、複数の機種、複数の貸料金、複数のタイプ(ミドルタイプ・甘デジタイプ ・・)などの集計を行います。
多くの条件ごとにFor~Nextでカウントする事は非常に時間が掛かります。
WorksheetFunction を使うことで時間が大幅に短縮されます。

WorksheetFunction では VLookup や AVERAGE,COUNTIFS なども使用できます。
VBAのコードで WorksheetFunction. と .(ピリオド)まで入力するとリストが表示されます。

WorksheetFunction はセルに元データが存在する場合とても便利な機能です。
ぜひ覚えて活用しましょう。