Подсчет количества ячеек в диапазоне в зависимости от их содержимого методами 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.
Всем, добрый день! Спасибо. |
|
Dima S Пользователь Сообщений: 2063 |
#2 27.01.2014 11:13:55
только зачем там аж vba? Изменено: Dima S — 27.01.2014 11:15:51 |
||
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
#3 27.01.2014 11:15:25
Не унывайте — в поиск — ищущий да обрящет! А чтобы по каждому чиху в аптеку (на форум) не бегать, то «аптечку» иметь… http://www.google.com/search?q=VBA+%d0%b4%d0%bb%d1%8f+%d0%bd%d0%b0%d1%87%d0%b8%d0%bd%d0%b0%d1%8e%d1%89%d0%b8%d1%85 «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
||
Dima S, я к VBA прибег только из-за того, чтоб от формул уйти, вес большой получается. |
|
Dima S Пользователь Сообщений: 2063 |
#5 27.01.2014 11:32:43
Z как раз и предложил вам ссылку на учебники по vba) |
||
Dima S,забыл указать что критерий сдвигается, cells(i, 5) получится.) |
|
Dima S Пользователь Сообщений: 2063 |
#7 27.01.2014 11:54:57
cells(i-1, 5) наверное? |
||
Dima S, Если смотреть на вложение, то я хочу сделать так чтоб критерий смещался. и во всех строках где есть «Парогениратор» в нужную ячейку вносилось количество ячеек содержащих это слово, в данном случае 3: |
|
Dima S Пользователь Сообщений: 2063 |
#9 27.01.2014 12:13:06
куда сдвигается? з.ы. все, понял ) Изменено: Dima S — 27.01.2014 12:14:07 |
||
Dima S, Это если критерий остается неподвижным. У меня ~ 40 000 строк, и в каждой я хочу указать кол-во одинаковых ячеек (количество операций в год, для ППР чтобы потом подвязать факт выполнения и вычислить % отклонения от ППР, если кому интересно для чего) ) . Если взять простую формулу, то это было бы так: Изменено: kolyambus55rus — 28.01.2014 01:25:35 |
|
Hugo Пользователь Сообщений: 23251 |
Ставьте эту счётесли() кодом, меняйте на значение. Но процесс небыстрый. |
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
#12 27.01.2014 12:33:56
Нормальные герои всегда идут… http://www.planetaexcel.ru/techniques/8/ . Но если главная хотелка макросами впихнуть формулу, чтобы
то хо-о-о-рошенько подумайте — оно это надоть?!. Изменено: Z — 27.01.2014 12:34:28 «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
||||
Z, надоть, надоть.) В сводной я отображу плановую неделю в которой будет отклонение по выполнению. |
|
kolyambus55rus Пользователь Сообщений: 67 |
#14 27.01.2014 14:12:14 Друзья:
Считает прекрасно и быстро, он косяк в одном — считает пустые, и из-за этого пропадает надолго, как от этого уйти!? Учусь,еще… |
||
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#15 27.01.2014 14:29:44 Определяйте последнюю строку по тому столбцу, где нужные данные — поменяйте номер столбца:
|
||
Юрий М, не пракатило, стопарица с ошибкой… |
|
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Я же не вижу, где у Вас на листе столбец с исходными данными… Я показал, как найти последнюю строку по столбцу 11 |
kolyambus55rus Пользователь Сообщений: 67 |
#18 28.01.2014 04:55:13 Юрий М, все работает, спасибо! Я просто в строке
не указал
Вот полный рабочий код (пригодится кому нибудь)
Учусь,еще… |
||||||
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.
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
You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA Count (wallstreetmojo.com)
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
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 57 |
|
1 |
|
Как подсчитать количество значений в столбце?19.10.2010, 13:44. Показов 13806. Ответов 4
Доброго всем времени суток.
0 |
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 57 |
|
19.10.2010, 14:09 [ТС] |
2 |
Причём, отмечу, что столбец может содержать и пустые ячейки.
0 |
Savelev |
|
19.10.2010, 14:15 |
3 |
Кол-во не пустых значений в первой колонке. |
natalie |
|
19.10.2010, 14:15 |
4 |
вам надо посчитать только те значения, которые не равны пустому??? |
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 57 |
|
19.10.2010, 15:12 [ТС] |
5 |
Спасибо всем, прокатило! =))
0 |