Подсчет количества ячеек в диапазоне в зависимости от их содержимого методами Count, CountA и CountBlank объекта WorksheetFunction из кода VBA Excel.
Метод WorksheetFunction.Count
Определение
Определение метода Count объекта WorksheetFunction в VBA Excel:
Метод WorksheetFunction.Count подсчитывает в заданном диапазоне (массиве) количество ячеек (элементов массива), содержащих числа, и возвращает значение типа Double.
Синтаксис
Синтаксис метода Count объекта WorksheetFunction:
WorksheetFunction.Count(Arg1, Arg2, ..., Arg30) |
Параметры
Параметры метода Count объекта WorksheetFunction:
Параметр | Описание |
---|---|
Arg1-Arg30 | От 1 до 30 аргументов, которые могут содержать различные типы данных или ссылаться на них. |
Примечания
- Метод WorksheetFunction.Count позволяет получить количество числовых значений в диапазоне ячеек или в массиве.
- При подсчете учитываются аргументы, которые являются числами, датами или текстовым представлением чисел.
- Логические значения учитываются при подсчете только в том случае, если они введены непосредственно в список аргументов.
Метод WorksheetFunction.CountA
Определение
Определение метода CountA объекта WorksheetFunction в VBA Excel:
WorksheetFunction.CountA — это метод, который подсчитывает в заданном диапазоне количество непустых ячеек, и возвращает значение типа Double.
Синтаксис
Синтаксис метода CountA объекта WorksheetFunction:
WorksheetFunction.CountA(Arg1, Arg2, ..., Arg30) |
Параметры
Параметры метода CountA объекта WorksheetFunction:
Параметр | Описание |
---|---|
Arg1-Arg30 | От 1 до 30 аргументов, которые могут содержать различные типы данных или ссылаться на них. |
Примечания
- Метод WorksheetFunction.CountA позволяет получить количество непустых ячеек в заданном диапазоне.
- Непустыми являются ячейки, которые содержат любые данные, включая значения ошибок и пустые строки (
""
). - Тесты показывают, что метод WorksheetFunction.CountA в массиве, созданном путем присвоения ему значений диапазона, содержащего пустые ячейки, все равно считает все элементы массива, как содержащие значения.
Метод WorksheetFunction.CountBlank
Определение
Определение метода CountBlank объекта WorksheetFunction в VBA Excel:
WorksheetFunction.CountBlank — это метод, который подсчитывает в заданном диапазоне количество пустых ячеек, и возвращает значение типа Double.
Синтаксис
Синтаксис метода CountBlank объекта WorksheetFunction:
WorksheetFunction.CountBlank(Arg1) |
Параметры
Параметры метода CountBlank объекта WorksheetFunction:
Параметр | Описание |
---|---|
Arg1 | Диапазон, в котором необходимо подсчитать количество пустых ячеек. |
Примечания
- Метод WorksheetFunction.CountBlank позволяет получить количество пустых ячеек в заданном диапазоне.
- Пустыми являются ячейки, которые не содержат никаких данных.
- Также подсчитываются, как пустые, ячейки с формулами, которые возвращают пустые строки (
""
). - Ячейки с нулевыми значениями в подсчете не участвуют.
Примеры
Таблица для строк кода VBA Excel со ссылками на диапазон "A1:C5"
, а также с массивом его значений в качестве аргументов:
Примеры с WorksheetFunction.Count
Sub Primer1() Dim n As Double, a() As Variant n = WorksheetFunction.Count(Range(«A1:C5»)) MsgBox n ‘Результат: 8 a = Range(«A1:C5») n = WorksheetFunction.Count(a) MsgBox n ‘Результат: 8 n = WorksheetFunction.Count(«раз», «два», «три», 1, 2, 3) MsgBox n ‘Результат: 3 n = WorksheetFunction.Count(«раз», «два», «три», «1», «2», «3», 1, 2, 3) MsgBox n ‘Результат: 6 n = WorksheetFunction.Count(Empty, Empty, 0, 0, «», «») MsgBox n ‘Результат: 4 n = WorksheetFunction.Count(True, False, «True», «False») MsgBox n ‘Результат: 2 End Sub |
Метод WorksheetFunction.Count можно использовать для подсчета количества числовых значений в массиве, если он создан путем присвоения ему значений диапазона. Тогда логические значения ИСТИНА и ЛОЖЬ, если они встречаются в диапазоне, в подсчете количества числовых значений не участвуют.
Примеры с WorksheetFunction.CountA
Sub Primer2() Dim n As Double, a() As Variant n = WorksheetFunction.CountA(Range(«A1:C5»)) MsgBox n ‘Результат: 13 a = Range(«A1:C5») n = WorksheetFunction.CountA(a) MsgBox n ‘Результат: 15 n = WorksheetFunction.CountA(«раз», «два», «три», 1, 2, 3) MsgBox n ‘Результат: 6 n = WorksheetFunction.CountA(Empty, Empty, 0, 0, «», «») MsgBox n ‘Результат: 6 End Sub |
Примеры с WorksheetFunction.CountBlank
Sub Primer3() Dim n As Double, a As Range n = WorksheetFunction.CountBlank(Range(«A1:C5»)) MsgBox n ‘Результат: 2 Set a = Range(«A1:C5») n = WorksheetFunction.CountBlank(a) MsgBox n ‘Результат: 2 End Sub |
Следующая статья по этой теме: VBA Excel. Методы CountIf и CountIfs.
In this Article
- COUNT WorksheetFunction
- Assigning a Count result to a Variable
- COUNT with a Range Object
- COUNT Multiple Range Objects
- Using COUNTA
- Using COUNTBLANKS
- Using the COUNTIF Function
- Disadvantages of WorksheetFunction
- Using the Formula Method
- Using the FormulaR1C1 Method
This tutorial will show you how to use the Excel COUNT function in VBA
The VBA COUNT function is used to count the number of cells in your Worksheet that have values in them. It is accessed using the WorksheetFunction method in VBA.
COUNT WorksheetFunction
The WorksheetFunction object can be used to call most of the Excel functions that are available within the Insert Function dialog box in Excel. The COUNT function is one of them.
Sub TestCountFunctino
Range("D33") = Application.WorksheetFunction.Count(Range("D1:D32"))
End Sub
You are able to have up to 30 arguments in the COUNT function. Each of the arguments must refer to a range of cells.
This example below will count how many cells are populated with values are in cells D1 to D9
Sub TestCount()
Range("D10") = Application.WorksheetFunction.Count(Range("D1:D9"))
End Sub
The example below will count how many values are in a range in column D and in a range in column F. If you do not type the Application object, it will be assumed.
Sub TestCountMultiple()
Range("G8") = WorksheetFunction.Count(Range("G2:G7"), Range("H2:H7"))
End Sub
Assigning a Count result to a Variable
You may want to use the result of your formula elsewhere in code rather than writing it directly back to and Excel Range. If this is the case, you can assign the result to a variable to use later in your code.
Sub AssignCount()
Dim result As Integer
'Assign the variable
result = WorksheetFunction.Count(Range("H2:H11"))
'Show the result
MsgBox "The number of cells populated with values is " & result
End Sub
COUNT with a Range Object
You can assign a group of cells to the Range object, and then use that Range object with the WorksheetFunction object.
Sub TestCountRange()
Dim rng As Range
'assign the range of cells
Set rng = Range("G2:G7")
'use the range in the formula
Range("G8") = WorksheetFunction.Count(rng)
'release the range object
Set rng = Nothing
End Sub
COUNT Multiple Range Objects
Similarly, you can count how many cells are populated with values in multiple Range Objects.
Sub TestCountMultipleRanges()
Dim rngA As Range
Dim rngB as Range
'assign the range of cells
Set rngA = Range("D2:D10")
Set rngB = Range("E2:E10")
'use the range in the formula
Range("E11") = WorksheetFunction.Count(rngA, rngB)
'release the range object
Set rngA = Nothing
Set rngB = Nothing
End Sub
Using COUNTA
The count will only count the VALUES in cells, it will not count the cell if the cell has text in it. To count the cells which are populated with any sort of data, we would need to use the COUNTA function.
Sub TestCountA()
Range("B8) = Application.WorksheetFunction.CountA(Range("B1:B6"))
End Sub
In the example below, the COUNT function would return a zero as there are no values in column B, while it would return a 4 for column C. The COUNTA function however, would count the cells with Text in them and would return a value of 5 in column B while still returning a value of 4 in column C.
Using COUNTBLANKS
The COUNTBLANKS function will only count the Blank Cells in the Range of cells – ie cells that have no data in them at all.
Sub TestCountBlank()
Range("B8) = Application.WorksheetFunction.CountBlanks(Range("B1:B6"))
End Sub
In the example below, column B has no blank cells while column C has one blank cell.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More
Using the COUNTIF Function
Another worksheet function that can be used is the COUNTIF function.
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
The procedure above will only count the cells with values in them if the criteria is matched – greater than 0, greater than 100, greater than 1000 and greater than 10000. You have to put the criteria within quotation marks for the formula to work correctly.
Disadvantages of WorksheetFunction
When you use the WorksheetFunction to count the values in a range in your worksheet, a static value is returned, not a flexible formula. This means that when your figures in Excel change, the value that has been returned by the WorksheetFunction will not change.
In the example above, the procedure TestCount has counted up the cells in column H where a value is present. As you can see in the formula bar, this result is a figure and not a formula.
If any of the values change therefore in the Range(H2:H12), the results in H14 will NOT change.
Instead of using the WorksheetFunction.Count, you can use VBA to apply a Count Function to a cell using the Formula or FormulaR1C1 methods.
Using the Formula Method
The formula method allows you to point specifically to a range of cells eg: H2:H12 as shown below.
Sub TestCountFormula
Range("H14").Formula = "=Count(H2:H12)"
End Sub
VBA Programming | Code Generator does work for you!
Using the FormulaR1C1 Method
The FromulaR1C1 method is more flexible in that it does not restrict you to a set range of cells. The example below will give us the same answer as the one above.
Sub TestCountFormula()
Range("H14").Formula = "=Count(R[-9]C:R[-1]C)"
End Sub
However, to make the formula more flexible, we could amend the code to look like this:
Sub TestCountFormula()
ActiveCell.FormulaR1C1 = "=Count(R[-11]C:R[-1]C)"
End Sub
Wherever you are in your worksheet, the formula will then count the values in the 12 cells directly above it and place the answer into your ActiveCell. The Range inside the COUNT function has to be referred to using the Row (R) and Column (C) syntax.
Both these methods enable you to use Dynamic Excel formulas within VBA.
There will now be a formula in H14 instead of a value.
VBA Count Function
In Excel, we use the count function to count the number of cells which contains numbers. Same can be done in VBA as well. In VBA, we can use the same function Count to get how many numbers of cells contain numbers. It only counts the cell with numbers. Values other than numbers cannot be counted.
Syntax of Count in Excel VBA
The syntax for the VBA Count function in excel is as follows:
How to Use VBA Count in Excel?
We will learn how to use a VBA Count Function with few examples in excel.
You can download this VBA Count Excel Template here – VBA Count Excel Template
Example #1 – VBA Count
For implementing this we have a list of some data in column A. This list contains numbers and texts as shown below. Now we with the help of Count function in VBA we will see, how many cells are having numbers. For this, we have identified a cell at A8 position, where we will see the output of Count Function through VBA.
Step 1: For this, we require a module. Go to Insert menu tab and click on Module option as shown below from the list.
Step 2: After that, we will get the blank window of Module. Now in that write the subcategory of VBA Count. Or choose any other name as per your choice.
Code:
Sub VBACount() End Sub
Step 3: Select the range of the cell where we want to apply Count function. Here, our output cell is A8 as defined above. So we have selected it as our Range.
Code:
Sub VBACount() Range("A8"). End Sub
Step 4: Now get the Value command, and it allows us to add the value in it.
Code:
Sub VBACount() Range("A8").Value = End Sub
Step 5: Now with the help of Count Function, select the range of the cells from which we want to get the count of a number of cells which contains Numbers only. Here, we have selected the range of cells from A1 to A6.
Code:
Sub VBACount() Range("A8").Value = "=Count(A1:A6)" End Sub
Ste 6: Once done then compile the code and run by clicking play button. As we can see below, the count of cells containing numbers is coming as 3. Which means the Count function in VBA has given the count of cells with numbers which are from cell A1 to A3.
Example #2 – VBA Count
In a similar way, we have another set of data. But this data has some dates, number with text along with numbers and text as shown below. We have fixed a cells C12 where we will see the output of Count function through VBA.
Now we will apply the Count function and see if this can Count date and number-text cells or not. We can choose to write the new code again or we can refer the same code which we have seen in example-1 and just change the reference cells.
Step 1: Go to Insert menu tab and click on Module option as shown below from the list.
Code:
Sub VBACount2() End Sub
Step 2: Select the range of cell where we want to see the output. Here that cell is C12.
Code:
Sub VBACount2() Range("C12").Value = End Sub
Step 3: Now use the count function in inverted commas in select the range of those cells which we need to count. Here that range is from cell C1 to C10.
Code:
Sub VBACount2() Range("C12").Value = "=Count(C1:C10)" End Sub
Step 4: Now run the above code.
We will see the Count function has returned the count of cells as 6 as shown below. Which means, count function can count cells with Date as well. Here, the values which are highlighted as bold are those values which just got counted through Count function in VBA.
Example #3 – VBA Count
There is another way to use Count Function in VBA. This method involves using Active Cells of the sheet. Here we will use the same data which we have seen in example-1.
Step 1: Open a new module and create the subcategory in the name of VBA Count as shown below.
Code:
Sub VBACount3() End Sub
Step 2: First, insert the ActiveCell function in VBA. This will help in selecting the range of cells.
Code:
Sub VBACount3() ActiveCell. End Sub
Step 3: Now with the function Formula, select the row number and column number which we want to insert in Count function. Here our reference Row is starting from 1 and Column is also 1.
Code:
Sub VBACount3() ActiveCell.FormulaR1C1 = End Sub
Step 4: Now insert the Count function under inverted commas as shown below.
Code:
Sub VBACount3() ActiveCell.FormulaR1C1 = "=COUNT()" End Sub
Step 5: Select the range of the cells from the point where we are applying the Count function. As we are going up from A8 to A1 so row count will be “-7” and column is first to nothing is mentioned to the row count “-2” from the starting point which is cell A8.
Code:
Sub VBACount3() ActiveCell.FormulaR1C1 = "=COUNT(R[-7]C:R[-2]C)" End Sub
Step 6: Now select the range of cell where we want to see the output. Here at this range cell A8, we will see the cursor as well.
Code:
Sub VBACount3() ActiveCell.FormulaR1C1 = "=COUNT(R[-7]C:R[-2]C)" Range("B8").Select End Sub
Step 7: Now run the code. We will see, the count function has returned the same count of number as 3 which we got in example-1.
Pros of VBA Count
- It is as easy as applying Count Function in excel.
- This is one of the easiest function that could be automated through VBA.
- If the process Count is repeating multiple times then automating the same with the help of Count function in VBA is quite a time saving and effort minimizing way.
Things to Remember
- While applying the count function in VBA, always quote the function name in inverted commas.
- As we use Count in Excel, the same way is also seen while applying Count Function in VBA.
- The process of applying VBA Count can be done by recoding a macro as well.
- Always save the written code in VBA in Macro enable excel file format to avoid losing code.
Recommended Articles
This is a guide to VBA Count. Here we discuss how to use Excel VBA Count Function along with practical examples and downloadable excel template. You can also go through our other suggested articles –
- VBA Copy Paste
- VBA Month
- VBA Subscript out of Range
- VBA Selecting Range
Count Function in VBA Excel
VBA COUNT function, one can use to count how many cells have values in it. We must remember that it counts the cells with numbers or text enclosed in double quotes or whose values are typed directly. Those cells with random data that Excel cannot translate do not count.
In VBA, COUNT is a worksheet function that one can apply through the worksheet function class. It is not a built-in function. VBA COUNT function can count all the numerical values from the supplied range.
This article will show you how to use the COUNT function in VBA.
Table of contents
- Count Function in VBA Excel
- Examples of VBA Count Function
- VBA Count Example #1
- VBA Count Example #2
- Recommended Articles
- Examples of VBA Count Function
Examples of VBA Count Function
Let us take some practical examples of the VBA COUNT function to understand its working.
You can download this VBA Count Function Template here – VBA Count Function Template
VBA Count Example #1
Write the code on your own to apply this COUNT function in Excel VBA.
Step 1: Start the macro by starting the Sub procedure.
Code:
Sub Count_Example1() End Sub
Step 2: Now, we will store the result of the COUNT function in cell C2. So our code should be as “Range(“C2”).Value =
Code:
Sub Count_Example1() Range("C2").Value = End Sub
Step 3: Since it is not a VBA built-in functionVBA functions serve the primary purpose to carry out specific calculations and to return a value. Therefore, in VBA, we use syntax to specify the parameters and data type while defining the function. Such functions are called user-defined functions.read more, we must apply it through the worksheet function class. So, access through worksheet function class.
Code:
Sub Count_Example1() Range("C2").Value = Worksheetfunction.Count( End Sub
Step 4: Now supply the range as A1 to A7.
Code:
Sub Count_Example1() Range("C2").Value = WorksheetFunction.Count(Range("A1:A7")) End Sub
These are three simple steps to arrive at the result.
Now, run the code to see the result in cell C2.
As usual, we got the result as 3, like when we applied the VBA COUNT function in a worksheet.
If we observe the formula bar, we have not got the formula. Rather, we just got the result of the formula. Therefore, we must alter our code to apply the formula to cell C2. Below is the code to apply the formula.
Code:
Sub Count_Example1() Range("C2").Value = "=Count(A1:A7)" End Sub
Run this VBA codeVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more using the F5 key or manually. Then, this will apply the formula to cell C2.
VBA Count Example #2
Look at one more example with the COUNT function. For this example, look at the below data.
We have a few numerical and non-numerical values from A1 to A11. Therefore, we will apply the code below to count the numerical values from the range A1 to A11.
Code:
Sub Count_Example2() Range("C2").Value = "=Count(A1:A11)" End Sub
When we execute the above code manually or using the F5 key, we get the result as 5.
However, when we closely look at the data from A1 to A11, we have numerical values in cells A1, A2, A3, A4, A5, A7, and A11. So, we have numerical values in 7 cells, but the formula has returned the result as only 5.
The reason for this is when we closely look at each cell in cells A5 and A7, the values are stored as text, not as numbers. So the COUNT function has returned the result as only 5 because it treats those cells formatted or stored as text as non-numerical values and ignores the numerical count.
Like this, we can use the COUNT function in Excel as part of both worksheets and VBA functions to count the numerical values from the list.
Recommended Articles
This article has been a guide to VBA COUNT. Here, we learn how to use the VBA COUNT function to count numeric values in Excel, along with practical examples and a downloadable template. Below you can find some useful Excel VBA articles: –
- VBA Remove Duplicate Values
- What is VBA Split Function in Excel?
- End in VBA
- VBA ArrayList
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Visual Basic for Applications (VBA) is the programming language of Excel and other offices. It is an event-driven programming language from Microsoft.
With Excel VBA one can automate many tasks in excel and all other office software. It helps in generating reports, preparing various charts, graphs and moreover, it performs calculation using its various functions.
Let’s see Count() functions in Excel.
- COUNT: It allows to count the number of cells that contain numbers in a range. One can use the COUNT function to calculate the total number of entries in an array of numbers.
Syntax:
=COUNT(value1, value2…)
value1: The very first item required to count numbers.
value2: It can be specified upto 255 other entries which you want to count.Note:
-> Only those arguments are counted that are numbers or text enclosed between quotation marks, as, “2”.
-> Arguments like logical values and text representation of numbers that are typed directly are counted.
-> Any values that cannot be translated to numbers are ignored.Example:
Output:
- COUNTA: This counts only those range of cells which are not empty.
Syntax:
=COUNTA(value1, value2…)
value1: It is the first argument to be counted.
value2: All additional arguments can be represented that has to becounted. This can be specified upto 255 arguments.Note: This will count cells that contain any kind of information that includes error values or empty text also, but not empty cells.
Example:
Output:
- COUNTIF:This will allow user to count the number of cells which meet a certain criteria.
Syntax:
=COUNTIF(where to look, what to look criteria)
Example:
Output:
- COUNTIFS: It will map criteria to cells in multiple ranges and the number of times all criteria met are counted.
Syntax:
=COUNTIFS(criteria_range1, criteria1, [criteria_range2, criteria2]…)
criteria_range1: First range to evaluate criteria.
criteria1: Criteria in any form that defines which all cells to be counted.
criteria_range2, criteria2, … : Additional range with their criteria. Specified upto 127 range/criteria.Remarks:
-> Wildcard characters can be used.
-> If criteria meets an empty cell, it will be treated as 0 value.
-> Count increases by 1 as the first cells meet their criteria, then the second cell meet and count again increases by 1 and so on.Example:
Output:
Like Article
Save Article