Excelの関数「COUNTIF(カウントイフ)」は、条件を満たすセルの数を数える便利な関数です。
日々の業務で活用している方も多いのではないでしょうか?
このCOUNTIF、実はVBA(マクロ)でも使うことができます。手作業で行っていた集計作業を自動化すれば、作業時間を大幅に短縮できる可能性があります。この記事では、VBAでCOUNTIFを使う具体的な方法や、注意点、応用テクニックまでを初心者にもわかりやすく解説します。
VBAでCountIf
を使う場合は、ワークシート関数として呼び出します。
基本的な構文は以下の通りです。
WorksheetFunction.CountIf(範囲, 条件)
例として、A1:A10の範囲に「東京」という文字列が何件あるかをカウントする場合は次のように書きます。
Dim countTokyo As Long
countTokyo = Application.WorksheetFunction.CountIf(Range("A1:A10"), "東京")
このように、Application.WorksheetFunction
を通じて、VBAの中でExcel関数を呼び出すことができます。
具体的な使い方を、メッセージボックスで件数を表示する例で紹介します。
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("シート名")
で対象のシートを指定してから、範囲を定義します。
VBAのネイティブ関数ではないため、Application.WorksheetFunction
またはApplication
を通じて使用する必要があります。以下の2つは同じ意味です。
Application.WorksheetFunction.CountIf(…)
Application.CountIf(…)
どちらでも動作しますが、明示的にWorksheetFunction
を使うほうがわかりやすいです。
Range
型で指定より柔軟な条件で集計したい場合、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
などを使えば、部分一致や柔軟な検索が可能になります。
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業務をスマートに効率化していきましょう!