VBA COUNT

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 3月 23, 2022

このチュートリアルでは、VBAでExcelのCOUNT関数を使用する方法について説明します。

VBAのCOUNT関数は、ワークシートの中で値を持つセルの数を数えるために使用します。VBAのWorksheetFunctionメソッドを使用してアクセスします。

COUNT WorksheetFunction

WorksheetFunctionオブジェクトは、Excelの関数の挿入ダイアログボックス内で利用可能なほとんどのExcel関数を呼び出すために使用することができます。COUNT関数もその一つです。

Sub TestCountFunction
  Range("D33") = Application.WorksheetFunction.Count(Range("D1:D32"))
End Sub

vba count syntax 構文

COUNT関数には、最大30個の引数を指定することができます。各引数は、セルの範囲を参照する必要があります。 以下の例では、セルD1~D9の値がいくつのセルに格納されているかをカウントします。

Sub TestCount()   
   Range("D10") = Application.WorksheetFunction.Count(Range("D1:D9"))
End Sub

以下の例では、G列の範囲とH列の範囲にいくつ値があるかを数えます。Applicationオブジェクトは省略することができます。

Sub TestCountMultiple()
   Range("G8") = WorksheetFunction.Count(Range("G2:G7"), Range("H2:H7"))
End Sub

カウントした結果を変数に代入する

計算式の結果を直接Excelの範囲に書き戻すのではなく、コード内の別の場所で使用したい場合があります。 そのような場合は、結果を変数に代入して、後でコードの中で使用することができます。

Sub AssignCount()
   Dim result As Integer
'変数に代入する   
   result = WorksheetFunction.Count(Range("H2:H11"))
'結果を表示する
   MsgBox "値が入力されたセルの数は" & result
End Sub

vba count values 値

Rangeオブジェクトを使ったCOUNT

Rangeオブジェクトにセル群を代入し、そのRangeオブジェクトをWorksheetFunctionオブジェクトで使用することもできます。

Sub TestCountRange()
   Dim rng As Range
'セルの範囲を代入する
   Set rng = Range("G2:G7")
'数式で範囲を使用する
   Range("G8") = WorksheetFunction.Count(rng)
'範囲オブジェクトを解放する
   Set rng = Nothing
End Sub

複数のRangeオブジェクトのCOUNT

同様に、複数のRangeオブジェクトに値が入力されているセルの数を数えることができます。

Sub TestCountMultipleRanges() 
   Dim rngA As Range 
   Dim rngB as Range
'セルの範囲を代入する 
   Set rngA = Range("D2:D10") 
   Set rngB = Range("E2:E10")   
'数式で範囲を使用する 
   Range("E11") = WorksheetFunction.Count(rngA, rngB)
'範囲オブジェクトを解放する
   Set rngA = Nothing 
   Set rngB = Nothing
End Sub

COUNTAの使用

COUNT関数はセル内の数値のみをカウントし、セルにテキストがある場合はカウントされません。何らかのデータが入力されているセルをカウントするには、COUNTA関数を使用する必要があります。

Sub TestCountA()
   Range("B8") = Application.WorksheetFunction.CountA(Range("B1:B6")) 
End Sub

以下の例では、COUNT関数はB列に値がないため0を返し、C列には4を返します。しかし、COUNTA関数は、テキストが入っているセルを数えて、B列では5を返し、C列では4を返します。 vba count diff counta 違い

COUNTBLANKSの使用

COUNTBLANKS関数は、セル範囲内の空白セル、つまりデータが全く入っていないセルだけを数えます。

Sub TestCountBlank()   
   Range("B8") = Application.WorksheetFunction.CountBlanks(Range("B1:B6")) 
End Sub

以下の例では、B列に空白セルがなく、C列に空白セルが1つあります。

vba count diff countblanks 違い

COUNTIF関数の使用

もうひとつ、ワークシートの関数として、COUNTIF関数があります。

Sub TestCountIf()
   Range("H14") = WorksheetFunction.CountIf(Range("H2:H10"), ">0")
   Range("H15") = WorksheetFunction.CountIf(Range("H2:H10"), ">100")
   Range("H16") = WorksheetFunction.CountIf(Range("H2:H10"), ">1000")
   Range("H17") = WorksheetFunction.CountIf(Range("H2:H10"), ">10000")
End Sub

上記のプロシージャは、0より大きい、100より大きい、1000より大きい、10000より大きいという条件に一致する場合のみ、値のあるセルを数えます。 この式が正しく動作するためには、条件を引用符で囲む必要があります。

vba count countif eg 例

WorksheetFunctionのデメリット

WorksheetFunction を使用してワークシートの範囲内の値を数える場合、柔軟な数式ではなく、静的な値が返されます。つまり、Excelの数値が変わっても、WorksheetFunctionで返された値は変わりません。

vba count static 静的

上の例では、TestCountプロシージャがH列で値が存在するセルをカウントアップしています。 数式バーを見ればわかるように、この結果は数式ではなく数値です。

したがって、Range(H2:H12)内のいずれかの値が変化しても、H14の結果は変化しません

WorksheetFunction.Countを使う代わりに、VBAでFormulaや FormulaR1C1メソッドを使って、セルにカウント関数を適用することができます。

Formulaメソッドの使用

以下のように、H2:H12 のようなセル範囲を指定することができます。

Sub TestCountFormula
  Range("H14").Formula = "=Count(H2:H12)"
End Sub

vba test count formula 数式

FormulaR1C1 メソッドの使用

FromulaR1C1メソッドは、決められたセル範囲に制限されないという点で、より柔軟性があります。以下の例では、上の例と同じ答えが得られます。

Sub TestCountFormula()
   Range("H14").Formula = "=Count(R[-9]C:R[-1]C)"
End Sub

vba count formula r1c1 数式 R1C1形式

しかし、より柔軟な計算式にするために、次のようなコードに修正することができます。

Sub TestCountFormula() 
   ActiveCell.FormulaR1C1 = "=Count(R[-11]C:R[-1]C) "
End Sub

ワークシートのどこにあっても、数式はその真上の12個のセルの値を数えて、その答えをアクティブセルに入れます。COUNT関数内のRangeは、Row(R)とColumn(C)の構文で参照する必要があります。

これらの方法は、VBAの中でダイナミックなExcelの数式を使用することを可能にします。

こうして、H14には値の代わりに数式が入りました。

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples