大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、CountIfs関数を使って「複数条件」に一致するセルをカウントする方法について、ご紹介します。「数式を埋め込む」方法を使うと感覚的にわかりやすいです。算出した結果をVBAの中で使うのであれば「WorksheetFunction」を使う方法が便利です。

はじめに

この記事では、CountIfs関数を使って、「複数条件」に一致するセルをカウントする方法について、ご紹介します。

CountIfs関数を使う方法として、「WorksheetFunction」を使う方法と「数式を埋め込む」方法があります。

「数式を埋め込む」方法の方が感覚的にわかりやすいです。

セルに入力して使うなら、「数式を埋め込む」方法が便利です。

算出した結果をVBAの中で使うのであれば、「WorksheetFunction」を使うといいです。

CountIfs関数は、「比較演算子」や「ワイルドカード」が使えますので、うまく使っていきましょう。

では、CountIfs関数を使って「複数条件」に一致するセルをカウントする方法について、解説していきます。

この記事で紹介すること

  • CountIfs関数を使って「複数条件」に一致するセルをカウントする方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBAコードまとめ

CountIfs関数を使って「複数条件」に一致したセルをカウントするVBAコードについて、まとめています。

VBAコードだけ確認したい場合に、ご活用ください。

'■「WorksheetFunction」で、CountIfs関数を使う

'CountIfs関数を使う
Range("D2") = WorksheetFunction.CountIfs(Range("A:A"), "B", Range("B:B"), "東京") '商品が「B」で、支店が「東京」をカウント

'ワイルドカードを使う
Range("D2") = WorksheetFunction.CountIfs(Range("A:A"), "B*", Range("B:B"), "東京") '商品が「Bを含む」値で、支店が「東京」をカウント

'比較演算子を使う
Range("C2") = WorksheetFunction.CountIfs(Range("A:A"), ">=2021/8/1", Range("A:A"), "<=2021/9/3") '「2021/8/1」~「2021/9/3」をカウント

'変数を使う
a = "B"
b = "東京"
Range("D2") = WorksheetFunction.CountIfs(Range("A:A"), a, Range("B:B"), b) '商品が「B」で、支店が「東京」をカウント

'セルの値を使う
Range("E4") = WorksheetFunction.CountIfs(Range("A:A"), Range("E1"), Range("B:B"), Range("E2")) '商品が「B」で、支店が「東京」をカウント
    

'■「数式を埋め込んで」CountIfs関数を使う

'CountIfs関数を使う
Range("D2") = "=COUNTIFS(A:A,""B"",B:B,""東京"")" '商品が「B」で、支店が「東京」をカウント

'ワイルドカードを使う
Range("D2") = "=COUNTIFS(A:A,""B*"",B:B,""東京"")" '商品が「Bを含む」値で、支店が「大阪」の数をカウント
    
'比較演算子を使う
Range("C2") = "=COUNTIFS(A:A,"">=2021/8/1"",A:A,""<=2021/9/3"")" '「2021/8/1」~「2021/9/3」をカウント

'変数を使う
a = """B""" '商品が「B」
b = """東京""" '支店が「東京」
Range("D2") = "=COUNTIFS(A:A," & a & ",B:B," & b & ")" '商品が「B」で、支店が「東京」の数をカウント

'セルの値を使う
Range("E4") = "=COUNTIFS(A:A,E1,B:B,E2)" '商品が「B」で、支店が「東京」の数をカウント

では、解説していきます。

WorksheetFunctionでCountIfs関数を使う

「WorksheetFunction」でCountIfs関数を使ってみます。

CountIfs関数に入力する引数 

CountIfs関数に入力する引数は、数式として使う場合と同じで、次のようになります。

'CountIfs関数を使う
a = WorksheetFunction.CountIfs(条件範囲1, 条件1, 条件範囲2, 条件2)

条件は、2つだけでなく自由に増やすことができます。

では、CountIfs関数を実際に使ってみます。

CountIfs関数を使ってみる

「WorksheetFunction」を使ってCountIfs関数を使うには、次のように入力します。

商品が「B」で、支店が「東京」のセルをカウントします。

Sub TEST1()
    
    '商品が「B」で、支店が「東京」をカウント
    Range("D2") = WorksheetFunction.CountIfs(Range("A:A"), "B", Range("B:B"), "東京")
    
End Sub

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

「"B"」と「"東京"」に一致するセルをカウント

「B」と「東京」に一致するセルをカウント

「"B"」と「"東京"」に一致するセルをカウントできました。

ワイルドカードを使う

CountIfs関数でワイルドカードを使ってみます。

ワイルドカードには、次の2つがあります。

  • 「*」:なんでもいい
  • 「?」:なんでもいい。ただし1文字。

ワイルドカードを使って、商品が「Bを含む」値で、支店が「東京」のセルをカウントしてみます。

Sub TEST2()
    
    '商品が「Bを含む」値で、支店が「東京」をカウント
    Range("D2") = WorksheetFunction.CountIfs(Range("A:A"), "B*", Range("B:B"), "東京")
    
End Sub

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

「ワイルドカード」を使う

「ワイルドカード」を使う

「ワイルドカード」を使って、セルをカウントできました。

比較演算子を使う

CountIfs関数で「比較演算子」を使ってみます。

比較演算子には次の種類があります。

  • 「">値"」 :値より大きい
  • 「"<値"」 :値より小さい
  • 「">=値"」:値以上
  • 「"<=値"」:値以下
  • 「"<>値"」:値以外
  • 「""」  :空白
  • 「"<>"」 :空白以外

比較演算子を使って、「2021/8/1」~「2021/9/3」のセルをカウントしてみます。

Sub TEST3()
    
    '「2021/8/1」~「2021/9/3」をカウント
    Range("C2") = WorksheetFunction.CountIfs(Range("A:A"), ">=2021/8/1", Range("A:A"), "<=2021/9/3")
    
End Sub

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

「比較演算子」を使う

「比較演算子」を使う

「比較演算子」を使って、一致するセルをカウントできました。

変数を使う

CountIfs関数で、変数を使ってみます。

Sub TEST4()
    
    a = "B"
    b = "東京"
    
    '商品が「B」で、支店が「東京」をカウント
    Range("D2") = WorksheetFunction.CountIfs(Range("A:A"), a, Range("B:B"), b)
    
End Sub

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

「変数」を使う

「変数」を使う

「変数」を使って、CountIfs関数でセルをカウントできました。

セルの値を使う

CountIfs関数に、セルの値を使って条件を指定することもできます。

Sub TEST5()
    
    '商品が「B」で、支店が「東京」をカウント
    Range("E4") = WorksheetFunction.CountIfs(Range("A:A"), Range("E1"), Range("B:B"), Range("E2"))
    
End Sub

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

「セルの値」を使う

「セルの値」を使う

「セルの値」を使って条件を指定して、セルをカウントできました。

クロス集計表を作成する

CountIfs関数は、個数を集計する「クロス集計表」を作成する際にかなり便利に使えます。

Sub TEST6()
    
    '「商品」をループ
    For i = 1 To 2
        '「支店」をループ
        For j = 1 To 2
            With Range("D1")
                '「商品」と「支店」が一致する数をカウント
                .Offset(i, j) = WorksheetFunction.CountIfs(Range("A:A"), .Offset(i, 0), Range("B:B"), .Offset(0, j))
            End With
        Next
    Next
    
End Sub

ポイントは「行と列の条件」をループして、個数を入力するところです。

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

クロス集計表を作成する

クロス集計表を作成する

「クロス集計表」を作成できました。

埋め込み数式を使ってCountIfs関数を使う

CountIfs関数をVBAで使うもう一つの方法が、「数式を埋め込む」方法です。

セルに数式を埋め込んでCountIfs関数を使う

「数式を埋め込んで」Countifs関数を使ってみます。

セルに入力する数式を「文字列」としてセルに入力することで、使うことができます。

Sub TEST7()
    
    '商品が「B」で、支店が「東京」をカウント
    Range("D2") = "=COUNTIFS(A:A,""B"",B:B,""東京"")"
    Range("D2").Value = Range("D2").Value '値に変換
    
End Sub

ポイントは、「"B"」は、「""B""」のように「""」で囲ってあげることです。

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

「"B"」と「"東京"」に一致するセルをカウント

「

「"B"」と「"東京"」に一致するセルをカウントできました。

数式をコピーして使うと簡単

数式を埋め込む際は、一度セルに数式を入力して、「数式をコピー」して使うと簡単です。

セルに数式を入力してコピーして使う

入力が正しいことを確認できれば、あとは数式をコピーします。

ワイルドカードを使う

CountIfs関数でワイルドカードを使って、数式を埋め込んでみます。

商品が「Bを含む」値で、支店が「東京」のセルをカウントします。

Sub TEST8()
    
    '商品が「Bを含む」値で、支店が「大阪」の数をカウント
    Range("D2") = "=COUNTIFS(A:A,""B*"",B:B,""東京"")"
    Range("D2").Value = Range("D2").Value '値に変換
        
End Sub

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

「ワイルドカード」を使う

「ワイルドカード」を使う

「ワイルドカード」を使って、条件一致のセルをカウントできました。

比較演算子を使う

「比較演算子」を使ったCountIfs関数の数式を埋め込んでみます。

「2021/8/1」~「2021/9/3」のセルをカウントしてみます。

Sub TEST9()
    
    '「2021/8/1」~「2021/9/3」をカウント
    Range("C2") = "=COUNTIFS(A:A,"">=2021/8/1"",A:A,""<=2021/9/3"")"
    Range("C2").Value = Range("C2").Value '値に変換
    
End Sub

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

「比較演算子」を使う

「比較演算子」を使う

「比較演算子」を使って、条件に一致するセルをカウントできました。

変数を使う

CountIfs関数を埋め込む方法で、「変数」を使ってみます。

ポイントは、変数に入力する際に「a = """B"""」のように「""」で囲うことです。

Sub TEST10()
    
    a = """B""" '商品が「B」
    b = """東京""" '支店が「東京」
    
    '商品が「B」で、支店が「東京」の数をカウント
    Range("D2") = "=COUNTIFS(A:A," & a & ",B:B," & b & ")"
    Range("D2").Value = Range("D2").Value '値に変換
    
End Sub

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

「変数」を使う

「変数」を使う

「変数」を使って、条件一致のセルをカウントできました。

セルの値を使う

セルの値を条件とするCountIfs関数を埋め込んでみます。

Sub TEST11()
    
    '商品が「B」で、支店が「東京」の数をカウント
    Range("E4") = "=COUNTIFS(A:A,E1,B:B,E2)"
    Range("E4").Value = Range("E4").Value '値に変換
    
End Sub

条件をセルに入力しておきます。

条件をセルに入力

表を用意

では、VBAコードを実行してみます。

「セルの値」を使う

「セルの値」を使う

「セルの値」を条件としてCountIfs関数で、条件一致のセルをカウントできました。

クロス集計表を作成する

CountIfs関数を埋め込むと、個数を集計する「クロス集計表」が簡単に作成できます。

Sub TEST12()
    
    '「商品」と「価格」が一致する価格の合計
    Range("E2:F3") = "=COUNTIFS($A:$A,$D2,$B:$B,E$1)"
    Range("E2:F3").Value = Range("E2:F3").Value '値に変換
    
End Sub

ポイントは、「絶対参照」にするところと「相対参照」にするセル範囲を、うまく設定することです。

セルに貼り付けた際に、セルから条件を取得できるようにします。

表を用意しておきます。

表を用意

表を用意

では、VBAコードを実行してみます。

クロス集計表を作成する

クロス集計表を作成する

クロス集計表を作成できました。

クロス集計表を作成するだけなら、1行で書けるのでかなり便利です。

おわりに

この記事では、CountIfs関数を使って、「複数条件」に一致するセルをカウントする方法について、ご紹介しました。

CountIfs関数を使う方法として、「WorksheetFunction」を使う方法と「数式を埋め込む」方法があります。

「数式を埋め込む」方法の方が感覚的にわかりやすいです。

セルに入力して使うなら、「数式を埋め込む」方法が便利です。

算出した結果をVBAの中で使うのであれば、「WorksheetFunction」を使うといいです。

CountIfs関数は、「比較演算子」や「ワイルドカード」が使えますので、うまく使っていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す