VBAを使うと決めたなら全てVBAの文法にのっとってプログラムを書くというのはひとつの方法ですね。視点を変えてExcelに用意されているワークシート関数を使うと、自分でゴリゴリとプログラムを書かなくても、たった1行で済んでしまう場合があります。そんな一例を紹介します。
たとえば条件に一致するセルの個数を数えたいとき
「CountIf」という関数があります。指定したセル範囲内で条件に一致するセルの個数を返してくれます。
CountIf(範囲,検索条件)
「範囲」には検索するセルの範囲、「検索条件」には条件を指定します。
セルに関数を入力するときは
「セル範囲B3~B50の中に”A”という文字列が入っているセルはいくつあるか」を探すときは、結果を表示するセル、たとえばD1に
= CountIf(B3:B50, “A”)
と入力します。
VBAでこつこつ記述すると
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub CountData Dim i As Long Dim cnt As Long cnt = 0 For i = 3 To 50 If ActiveSheet.Cells(i, 2) = "A" Then cnt = cnt + 1 End If Next i ActiveSheet.Cells(1, 4) = cnt End Sub |
セル範囲の行数分だけForでループしてセルの内容を確認し、”A”に一致したらカウンタをひとつ増やしています。
ワークシート関数をVBAで指定すると
1 2 3 4 5 6 7 8 |
Sub CountData Dim cnt As Long cnt = WorksheetFunction.CountIf(ActiveSheet.Range("B3:B50"), "A") ActiveSheet.Cells(1, 4) = cnt End Sub |
なんとまあ、数を数える処理は1行でおしまいです。こっちのほうがシンプルで便利だと思いませんか。
WorksheetFunctionプロパティ
ApplicationオブジェクトのWorksheetFunctionプロパティを使うとワークシート関数をVBAの中で呼び出すことができます。「Application.」は省略可能です。
注意点はすべてのワークシート関数が利用できるわけではないことと、引数によっては引数をVBA式で指定する必要があることでしょうか。