【ExcelVBA】条件に一致したセルをカウントする方法 CountIf

こんなあなたにおすすめ

・Excel VBAでCountIfの使い方を知りたい

Excelを使っていると、条件に一致したセルをカウントしたいということがあります。
そんなときは、CountIf関数を使えばできます。

ExcelでのCountIfの使い方については、下記の記事で解説していますので、ご参照ください。
>>【Excel】条件に一致したセルをカウントする方法 CountIf

今回は、Excel VBAでCountIfを使う方法について解説します。

Excel VBAでCountIfを使う方法以外にも、部分一致や条件一致でカウントする方法、
Select Case文で書いた場合との処理速度の比較についても解説します。

CountIfの使い方

CountIfを使うことで、条件に合ったセルの数をカウントすることができます。

WorksheetFunction.CountIf(セル範囲, 条件)

イベントの出欠管理表で実際にコードを見ていきましょう。
CountIfを使うことで、誰かが出欠を入力したときにプログラムを実行することで簡単に出欠人数を更新できます。

自分でカウントしてやると、何度も自分でカウントする手間やカウントミスが発生するため、面倒です。

↓実行前

Sub test1()

    Dim attend As Long      '出席人数格納用変数を定義する
    Dim absence As Long     '欠席人数格納用変数を定義する
    Dim undecide As Long    '未定人数格納用変数を定義する
    Dim notEntered As Long  '未入力人数格納用変数を定義する
    
    '出席の人数をカウント
    attend = WorksheetFunction.CountIf(Range("B2:B4"), Range("D2"))
    Range("E2").Value = attend
    
    '欠席の人数をカウント
    absence = WorksheetFunction.CountIf(Range("B2:B4"), Range("D3"))
    Range("E3").Value = absence
    
    '未定の人数をカウント
    undecide = WorksheetFunction.CountIf(Range("B2:B4"), Range("D4"))
    Range("E4").Value = undecide
    
    '未入力の人数をカウント
    notEntered = WorksheetFunction.CountIf(Range("B2:B4"), "")
    Range("E5").Value = notEntered

End Sub

↓実行結果

部分一致 or 条件一致の使い方

・検索したい文字列が末尾
WorksheetFunction.CountIf(Range(“A1:A5”), “*a”)

・検索したい文字列が先頭
WorksheetFunction.CountIf(Range(“A1:A5”), “a*”)

・検索したい文字列を含む
WorksheetFunction.CountIf(Range(“A1:A5”), “*a*”)

・完全一致
WorksheetFunction.CountIf(Range(“A1:A5”), “a”)

↓実行前

Sub test2()
    
    Dim matchF As Integer
    Dim matchA As Integer
    Dim matchFA As Integer
    Dim matchP As Integer
    
    matchF = WorksheetFunction.CountIf(Range("A1:A4"), "*a")
    matchA = WorksheetFunction.CountIf(Range("A1:A4"), "a*")
    matchFA = WorksheetFunction.CountIf(Range("A1:A4"), "*a*")
    matchP = WorksheetFunction.CountIf(Range("A1:A4"), "abc")
    
    MsgBox "aが末尾にある数:" & matchF & vbCrLf & _
           "aが先頭にある数:" & matchA & vbCrLf & _
           "aが含まれる文字列数:" & matchFA & vbCrLf & _
           "完全一致数:" & matchP
    
End Sub

↓実行結果

MsgBoxについては、下記の記事で解説していますので、ご参照ください。
>>【ExcelVBA】メッセージボックスの使い方 MsgBox

処理速度 CountIf vs SelectCase

Worksheet関数のCountIfとSelectCase文の処理速度を比較してみました。

Select Case文については、下記の記事で解説していますので、ご参照ください。
>>【ExcelVBA】条件分岐処理 コードをスッキリ書ける Select Case

結果は、CountIfの方が10倍速いです。
処理速度は速い方がいいので、コードを書く際は処理速度を気にしてみてください。

Sub test3()

    Dim attend As Long      '出席人数格納用変数を定義する
    Dim absence As Long     '欠席人数格納用変数を定義する
    Dim undecide As Long    '未定人数格納用変数を定義する
    Dim notEntered As Long  '未入力人数格納用変数を定義する
    Dim i As Long           'For文用の変数を格納する

    For i = 2 To 4
    
        Select Case Cells(i, 2).Value   'Caseの条件と一致した場合、処理を実行する
    
            Case Range("D2").Value          '出席の場合
                attend = attend + 1         '出席人数を加算する
            Case Range("D3").Value          '欠席の場合
                absence = absence + 1       '欠席人数を加算する
            Case Range("D4").Value          '未定の場合
                undecide = undecide + 1     '未定人数を加算する
            Case ""                         '未入力の場合
                notEntered = notEntered + 1 '未入力人数を加算する
            Case Else                       '上記Case以外の場合
                MsgBox "おかしな値が入力されています。" 'メッセージボックスを表示する
        
        End Select
        
    Next
    
    'セルに値を入力する
    Range("E2").Value = attend
    Range("E3").Value = absence
    Range("E4").Value = undecide
    Range("E5").Value = notEntered

End Sub

まとめ

ここまで、CountIfの使い方について解説しました。

CountIfを使うことで、条件と一致するセルの数を簡単にカウントできますので、ぜひ使ってみてください。

MsgBoxについては、下記の記事で解説していますので、ご参照ください。
>>【ExcelVBA】メッセージボックスの使い方 MsgBox

Select Case文については、下記の記事で解説していますので、ご参照ください。
>>【ExcelVBA】条件分岐処理 コードをスッキリ書ける Select Case

ExcelでのCountIfの使い方については、下記の記事で解説していますので、ご参照ください。
>>【Excel】条件に一致したセルをカウントする方法 CountIf

Excelで作業効率をアップしたい方は、下記の記事もご参照ください。
>>Excelのショートカット一覧 覚えて作業効率アップ!!
>>Excelで覚えておくべき関数 作業効率アップ間違いなし

【Excelについて学びたい方】
Excel 最強の教科書[完全版]
【Excel VBAについて学びたい方】
Excel VBA 脱初心者のための集中講座
エンジニアを目指すなら、TechAcademy!
オンラインスクール受講者数No.1!

・自宅にいながらオンライン完結で勉強できる
➡スクールへの移動時間を削減するため、効率的に学習可能!

・受講生に1人ずつ現役のプロのパーソナルメンターがつく
➡分からないことがわかるまで徹底的にメンターに質問可能!

・チャットで質問すればすぐに回答が返ってくる
➡レスポンスが速いから、わからないことをその場で解決!

・オリジナルサービスやオリジナルアプリなどの開発までサポート
➡就職、転職のときに役立つポートフォリオを開発可能!

無料で体験できるので、まずはお試し
>>TechAcademyの無料体験はこちら

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です