【VBAリファレンス|実務向け】Excelで実務を加速!COUNTIF関数で条件に合う件数を正確に数え上げる方法

スポンサーリンク

導入:なぜCOUNTIF関数が実務で重要なのか?

「この条件に合うデータは何件あるんだろう?」
「特定の項目がいくつ含まれているか、すぐに知りたい!」

こんな疑問に、あなたはどのように答えていますか?
手作業で数えたり、フィルターをかけて数えたりしていませんか?
それは、時間もかかりますし、間違いも起こりやすい非効率な方法です。

今回ご紹介する COUNTIF関数 を使えば、指定した条件に合うデータの件数を、瞬時に、そして正確に数え上げることができます。
この関数を使いこなすだけで、データ集計のスピードと精度が格段に向上し、日々の業務をより効率的に進めることが可能になります。

基礎知識:COUNTIF関数とは?

COUNTIF関数は、指定した範囲(セル群)の中で、特定の条件に一致するセルの個数を数えるための関数です。
例えば、

  • 「東京」と入力されているセルがいくつあるか
  • 「100」以上であるセルがいくつあるか
  • 「完了」と入力されているタスクがいくつあるか

といった集計が可能になります。

COUNTIF関数の構文:

=COUNTIF(範囲, 条件)

  • 範囲: 件数を数えたいセル範囲を指定します。(例: `A1:A10`)
  • 条件: 数えたいセルの条件を指定します。文字列、数値、数式、またはセル参照を指定できます。(例: `”東京”`, `”>=100″`, `B1`)

実装/解決策:COUNTIF関数で条件に合う件数を数える

ここでは、具体的な例を使ってCOUNTIF関数の使い方を解説します。

例:商品リストから、特定の商品の販売数を数える

仮に、以下のような商品リストがあるとします。

| 列A (商品名) | 列B (販売数) |
| :———– | :———– |
| りんご | 150 |
| みかん | 200 |
| りんご | 120 |
| バナナ | 180 |
| りんご | 100 |

ここで、「りんご」がいくつ販売されているかを数えたいとします。

1. 件数を表示したいセル(例: D1セル)を選択します。
2. 以下の数式を入力します。

=COUNTIF(A1:A5, “りんご”)

  • `A1:A5` は、商品名が入力されている範囲です。
  • `”りんご”` は、条件として数えたい商品名です。

3. Enterキーを押すと、D1セルに「3」と表示されます。これは、「りんご」がリストの中に3つ存在することを示しています。

数値条件の場合

もし、「販売数が150以上の商品がいくつあるか」を数えたい場合は、条件を数値で指定します。

1. 件数を表示したいセル(例: D2セル)を選択します。
2. 以下の数式を入力します。

=COUNTIF(B1:B5, “>=150”)

  • `B1:B5` は、販売数が入力されている範囲です。
  • `”>=150″` は、150以上という条件です。比較演算子(`>=`, `<=`, `>`, `<`, `=`, `<>`)を使用する場合は、条件をダブルクォーテーション(`””`)で囲む必要があります。

3. Enterキーを押すと、D2セルに「3」と表示されます。(みかん: 200, バナナ: 180, りんご: 150 の3つ)

サンプルプログラム:COUNTIF関数を使った実践例

以下のサンプルコードは、指定した範囲のデータから、特定の文字列が含まれるセルの件数を数え、結果を表示するVBAコードです。
Excelのシート上で、A列に商品名、B列に販売数が入力されている状況を想定しています。

Sub CountSpecificItem()

‘ 変数を宣言します
Dim ws As Worksheet
Dim itemCount As Long
Dim targetItem As String

‘ 現在アクティブなシートを取得します
Set ws = ThisWorkbook.ActiveSheet

‘ 数えたい対象の商品名を設定します(例: “りんご”)
targetItem = “りんご”

‘ COUNTIF関数を使用して、A列(商品名)からtargetItemに一致するセルの件数を数えます
‘ 範囲はA1からA10までとします
itemCount = WorksheetFunction.CountIf(ws.Range(“A1:A10″), targetItem)

‘ 結果をメッセージボックスで表示します
MsgBox targetItem & ” は ” & itemCount & ” 件 あります。”

‘ 別の条件で数えてみます
Dim minSales As Double
Dim salesCount As Long

‘ 販売数の最小値を設定します(例: 150)
minSales = 150

‘ COUNTIF関数を使用して、B列(販売数)がminSales以上のセルの件数を数えます
‘ 範囲はB1からB10までとします
salesCount = WorksheetFunction.CountIf(ws.Range(“B1:B10”), “>=” & minSales)

‘ 結果をメッセージボックスで表示します
MsgBox “販売数が ” & minSales & ” 以上の商品は ” & salesCount & ” 件 あります。”

End Sub

【コードの解説】

  • `Dim ws As Worksheet`: シートオブジェクトを格納するための変数を宣言します。
  • `Dim itemCount As Long`: 数えた件数を格納するための変数を宣言します。Long型は大きな整数を扱えます。
  • `Dim targetItem As String`: 数えたい対象の文字列(商品名など)を格納するための変数を宣言します。
  • `Set ws = ThisWorkbook.ActiveSheet`: 現在開いているブックの、アクティブなシートを変数 `ws` に代入します。
  • `targetItem = “りんご”`: ここで、数えたい具体的な商品名を設定します。この部分を変更することで、他の商品名についても件数を数えられます。
  • `itemCount = WorksheetFunction.CountIf(ws.Range(“A1:A10”), targetItem)`: VBAからExcelの `COUNTIF` 関数を呼び出しています。
  • `ws.Range(“A1:A10”)`: 件数を数える対象となるセル範囲を指定します。必要に応じて `A1:A5` のように変更してください。
  • `targetItem`: 条件を指定します。ここでは変数 `targetItem` に格納された値(”りんご”)が条件になります。
  • `MsgBox targetItem & ” は ” & itemCount & ” 件 あります。”`: 集計結果をメッセージボックスで表示します。
  • 後半のコード (`minSales` と `salesCount`) は、数値条件での `COUNTIF` 関数の使い方を示しています。
  • `”>=” & minSales` のように、比較演算子と変数を組み合わせることで、柔軟な条件指定が可能です。

このVBAコードを実行すると、指定した条件に合うデータの件数をダイアログボックスで確認できます。

応用・注意点

  • ワイルドカードの使用: COUNTIF関数では、ワイルドカード文字(“ や `?`)を使って、あいまいな条件で数えることもできます。
  • “: 任意の文字列(0文字以上)に一致します。例: `”りんご”` は「りんご」で始まるすべての項目に一致します。
  • `?`: 任意の1文字に一致します。例: `”か?き”` は「かきき」や「かさき」などに一致します。
  • 注意点: ワイルドカード文字そのものを検索したい場合は、その文字の前にチルダ(`~`)を付けます。例: `”~”` はアスタリスク(“)そのものに一致します。
  • 大文字・小文字の区別: COUNTIF関数は、デフォルトでは大文字と小文字を区別しません。もし区別したい場合は、VBAの `Application.WorksheetFunction.CountIf` ではなく、`Application.CountIf` を使用するか、`SumProduct` 関数と `Exact` 関数を組み合わせるなどの方法が必要になります。
  • 空白セルのカウント: 空白セルを数えたい場合は、条件に `””` を指定します。

=COUNTIF(A1:A10, “”)

  • エラー値のカウント: COUNTIF関数は、エラー値(#N/A, #VALUE! など)を数えることはできません。エラー値の件数を数えたい場合は、別の関数(例: `ISERROR` 関数と `SUMPRODUCT` 関数の組み合わせ)を使用します。
  • COUNTIFS関数: 複数の条件にすべて一致する件数を数えたい場合は、`COUNTIF` 関数ではなく `COUNTIFS` 関数を使用します。

COUNTIF関数は、データ集計の基本でありながら、非常に強力な関数です。ぜひ、日々の業務で積極的に活用してみてください。
次回は、さらに複雑な条件分岐に挑戦します!

タイトルとURLをコピーしました