Excelの関数「COUNTIF(カウントイフ)」は、条件を満たすセルの数を数える便利な関数です。
日々の業務で活用している方も多いのではないでしょうか?
このCOUNTIF、実はVBA(マクロ)でも使うことができます。手作業で行っていた集計作業を自動化すれば、作業時間を大幅に短縮できる可能性があります。この記事では、VBAでCOUNTIFを使う具体的な方法や、注意点、応用テクニックまでを初心者にもわかりやすく解説します。
VBAでCOUNTIFを使う基本構文
VBAでCountIf
を使う場合は、ワークシート関数として呼び出します。
基本的な構文は以下の通りです。
WorksheetFunction.CountIf(範囲, 条件)
例として、A1:A10の範囲に「東京」という文字列が何件あるかをカウントする場合は次のように書きます。
Dim countTokyo As Long
countTokyo = Application.WorksheetFunction.CountIf(Range("A1:A10"), "東京")
このように、Application.WorksheetFunction
を通じて、VBAの中でExcel関数を呼び出すことができます。
実際の使用例:VBAでCOUNTIFを使ってメッセージを表示する
具体的な使い方を、メッセージボックスで件数を表示する例で紹介します。
Sub CountIfSample()
Dim cnt As Long
cnt = Application.WorksheetFunction.CountIf(Range("B2:B100"), "完了")
MsgBox "完了の件数は " & cnt & " 件です。"
End Sub
このコードは、B列(B2~B100)の中で「完了」と書かれたセルの数を数え、その件数をメッセージボックスで表示します。
セルの値を条件に使う場合
固定値ではなく、セルに入力された値を条件にすることも可能です。
Sub CountIfWithCellValue()
Dim targetValue As String
targetValue = Range("D1").Value
Dim cnt As Long
cnt = Application.WorksheetFunction.CountIf(Range("A2:A100"), targetValue)
MsgBox "該当件数:" & cnt
End Sub
この場合、セルD1に入力された値を条件として、A列のデータをカウントします。
数値の条件を使う方法
文字列だけでなく、数値に対しても条件を設定できます。たとえば「80以上の数値の件数をカウントする」場合は、次のように書きます。
Sub CountIfWithNumber()
Dim cnt As Long
cnt = Application.WorksheetFunction.CountIf(Range("C2:C100"), ">=80")
MsgBox "80点以上の件数:" & cnt
End Sub
条件は文字列として指定するため、">=80"
のようにクオーテーションで囲む必要があります。
ワークシート名を指定して使用する
別のシートを対象にしたい場合は、以下のように記述します。
Sub CountIfWithSheet()
Dim cnt As Long
cnt = Application.WorksheetFunction.CountIf(Worksheets("データ").Range("A2:A50"), "未対応")
MsgBox "未対応の件数:" & cnt
End Sub
Worksheets("シート名")
で対象のシートを指定してから、範囲を定義します。
COUNTIFを使うときの注意点
1. ワークシート関数であることを忘れない
VBAのネイティブ関数ではないため、Application.WorksheetFunction
またはApplication
を通じて使用する必要があります。以下の2つは同じ意味です。
Application.WorksheetFunction.CountIf(…)
Application.CountIf(…)
どちらでも動作しますが、明示的にWorksheetFunction
を使うほうがわかりやすいです。
2. 範囲と条件の型に注意
- 範囲は
Range
型で指定 - 条件は文字列として渡す(数値や演算子を含む場合でも文字列)
COUNTIFの代替:ループで条件をカウントする
より柔軟な条件で集計したい場合、CountIf
ではなくForループを使ってカウントする方法もあります。
Sub CountWithLoop()
Dim rng As Range
Dim cell As Range
Dim cnt As Long
Set rng = Range("E2:E100")
cnt = 0
For Each cell In rng
If cell.Value Like "*完了*" Then
cnt = cnt + 1
End If
Next cell
MsgBox "完了を含む件数:" & cnt
End Sub
Like
やInStr
などを使えば、部分一致や柔軟な検索が可能になります。
応用:複数条件のカウント(COUNTIFS)
VBAではCOUNTIFS
も使用できます。複数条件で集計が必要な場面ではこちらが便利です。
Sub CountIfsSample()
Dim cnt As Long
cnt = Application.WorksheetFunction.CountIfs( _
Range("A2:A100"), "男性", _
Range("B2:B100"), "30代" _
)
MsgBox "30代男性の件数:" & cnt
End Sub
複数の条件をセットで指定できます。
まとめ
CountIf
関数は、VBAでも非常に強力な集計ツールになります。
基本的な使い方をマスターするだけで、日々の集計業務が大幅に効率化されるでしょう。
VBAでの自動化に慣れてくれば、CountIfs
やループ構文
を使った高度な処理も自在に組み込むことができます。
ぜひ今回紹介した内容を活用して、Excel業務をスマートに効率化していきましょう!