- 公開日:
- 更新日:
ExcelのVBA(マクロ)でCountIfを使って条件に合ったセルを数える
ExcelではCOUNTIF関数を使用することで条件に一致するセルの個数を数えることができますが、VBA(マクロ)でもワークシート関数のCountIfメソッドを使用すれば同じように条件に合ったセルを数えることができます。
この記事では、VBAのCountIfメソッドの基本的な使い方から空白以外のセルをカウントしたり、重複を判別する方法も合わせて解説しています。
サンプルコード付きなのでVBAに詳しくない方でも動作させることができます。
Excelを使った日付選択のマクロを無料でダウンロード!
Excelでカレンダーから日付を入力できるマクロを無料でダウンロードできます。コードを変更すれば、カレンダーの背景色や、今日の日付の色を変更したりとカスタマイズすることも可能です。
CountIfメソッドの書き方
VBAのCountIfはワークシート関数(worksheetfunction)で使用できるメソッドの1つです。指定した範囲の中で検索条件に一致するセルの個数を返します。
ワークシート関数とはExcelのワークシート上で利用できる関数のことを言います。CountIfの他にもIFやVLOOKUPもあります。
構文
式としては「WorksheetFunction.CountIf(範囲,検索条件)」のように記述します。
引数名 | 必須/オプション | 説明 |
---|---|---|
範囲 | 必須 | 検索の対象とするセルやセルの範囲を指定します。 |
検索条件 | 必須 | 「範囲」の中からセルを検索するための条件を、数値、式、セル範囲、または文字列で指定します。 |
使用例
VBAのコードの中で「CountIf」がどのように使用されるのか使い方をご紹介します。
上図は商品種別ごとに売上個数が入力されています。B3~B6のセル範囲から検索対象のE3に書かれた商品(リンゴ)が入っているセルの個数をF3セルに出力させてみましょう。
Sub sample()
Cells(3, 6) = WorksheetFunction.CountIf(Range("B3:B6"), Cells(3, 5))
End Sub
VBAで「CountIf」を使ったサンプルになります。
- 2行目:「Range("B3:B6")」が範囲です。B3~B6のセル範囲を検索範囲とします。
- 2行目:「Cells(3, 5)」が検索条件です。例ではE3セルの「リンゴ」を範囲から探します。
CountIfの基本的な使い方(実践)
ExcelのVBAでCountIfを実際に使ってみましょう。
VBAのコードを記述するためにVBE(Visual Basic Editor)を起動します。①リボンから【開発】タブを選択し、②【Visual Basic】を押します。
Visual Basic Editorが起動したら①対象のシートを【ダブルクリック】し、②ソースコードを記述して③【▶】ボタンを押します。※ソースコードは記事内の「使用例」をご参考ください
VBAを実行した後にシートに戻ると例ではF3セルに「2」と入力されました。VBAのCountIfでB3~B6の範囲から「リンゴ」のセルがいくつあるか求めることができました。
CountIfのさまざまな活用方法
CountIfの検索条件で変数を使う
CountIfの検索条件で変数と比較演算子を組み合わせる場合の記述方法をご説明します。
上図では、C3~C6のセル範囲でE3セルに入力した目標個数を超えているセルの個数を数えてF3セルに入力したいと思います。
Sub sample()
x = Cells(3, 5)
Cells(3, 6) = WorksheetFunction.CountIf(Range("C3:C6"), ">" & x)
End Sub
VBAで「CountIf」を使ったサンプルになります。
- 2行目:変数xにE3セルに入力された数字を代入します。
- 3行目:「Range("C3:C6")」が検索範囲、「">" & x」が検索条件です。「xを超えたら」という条件を指定しています。
変数を使わない場合「"> 50"」のように記述しますが、検索条件で変数を使用したい場合は、変数と比較演算子を文字列結合「&」でつなげます。
VBAを実行すると、C3~C6のセル範囲でE3セルに入力した目標個数(50)を超えているセルの個数「3」がF3セルに表示されました。
空白以外のセルをカウントする
CountIfを使って空白以外のセルを数える方法をご紹介します。
上図では、B3~B10のセル範囲で空白以外のセルの個数を数えてE3セルに入力したいと思います。
Sub sample()
Cells(3, 5) = WorksheetFunction.CountIf(Range("B3:B10"), "<>")
End Sub
VBAで「CountIf」を使ったサンプルになります。
- 2行目:「Range("B3:B10")」が検索範囲、「"<>"」が検索条件です。
「"<>"」は「"<>" & ""」を省略したものになります。比較演算子「<>」は等しくないという意味ですが、空白("")と文字列結合(&)することで空白ではないという条件を指定しています。
VBAを実行すると、B3~B10のセル範囲で空白でないセルの個数「7」がE3セルに表示されました。
重複を判別する
CountIfを使って重複しているセルを調べる方法をご紹介します。
上図では、B3~B6のセル範囲で重複しているセルがあればD列に「重複」と入力したいと思います。
Sub sample()
Dim i
For i = 3 To 6
If WorksheetFunction.CountIf(Range("B3:B6"), Cells(i, 2)) > 1 Then
Cells(i, 4) = "重複"
End If
Next i
End Sub
VBAで「CountIf」を使ったサンプルになります。
- 2行目:ループ用の変数iを定義します。
- 3行目:For文で変数iを3から6まで繰り返します。
- 4行目:If文の条件式「If~Then」にCountIfを指定しています。「Range("B3:B6")」が検索範囲、「Cells(i, 2)) > 1」が検索条件です。
- 5行目:B3~B6のセル範囲に対象のセルの内容が2つ以上あればD列に「重複」と入力します。
VBAを実行すると、B3~B6のセル範囲で重複しているセルがあればD列に「重複」と表示されました。
CountIfsメソッドを使って複数条件に対応する
条件が複数ある場合はCountIfではなくCountIfsメソッドを使いましょう。
上図では、B3~C6のセル範囲で「商品種別がリンゴ」かつ「売上個数が80より大きい」セルの個数を数えてE3セルに入力したいと思います。
Sub sample()
Cells(3, 5) = WorksheetFunction.CountIfs(Range("B3:B6"), "リンゴ", Range("C3:C6"), ">80")
End Sub
VBAで「CountIf」を使ったサンプルになります。
- 2行目:CountIfsの1つ目の検索範囲が「Range("B3:B6")」、検索条件が「"リンゴ"」です。
- 2行目:CountIfsの2つ目の検索範囲が「Range("C3:C6")」、検索条件が「">80"」です。
CountIfでは検索範囲と検索条件を複数指定することができます。
VBAを実行すると、B3~B6のセル範囲で「商品種別がリンゴ」かつ「売上個数が80より大きい」セルの個数「1」がE3セルに表示されました。
ExcelのCOUNTIF関数の使い方
今回はVBAのCountIfをご紹介しましたが、ExcelのCOUNTIF関数の使い方を確認したいという方は下記の記事で詳しく説明していますのでご参考ください。
ExcelのCOUNTIF関数の使い方|条件に一致するデータの個数表示
ExcelのCOUNTIF関数で複数範囲(飛び飛び)を指定する方法
ExcelのCOUNTIF関数で複数条件OR(または)の役割を果たす方法