こんなあなたにおすすめ
・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で覚えておくべき関数 作業効率アップ間違いなし
オンラインスクール受講者数No.1!
・自宅にいながらオンライン完結で勉強できる
➡スクールへの移動時間を削減するため、効率的に学習可能!
・受講生に1人ずつ現役のプロのパーソナルメンターがつく
➡分からないことがわかるまで徹底的にメンターに質問可能!
・チャットで質問すればすぐに回答が返ってくる
➡レスポンスが速いから、わからないことをその場で解決!
・オリジナルサービスやオリジナルアプリなどの開発までサポート
➡就職、転職のときに役立つポートフォリオを開発可能!
無料で体験できるので、まずはお試し
>>TechAcademyの無料体験はこちら