Vba excel подсчет количества значений

Подсчет количества ячеек в диапазоне в зависимости от их содержимого методами 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.


 

Всем, добрый день!
Пытался сам найти, но безнадежно.
Помогите слабоориентирующемуся человеку как с помошью VBA посчитать кол-во значений по критерию.
Например, в  столбце 5 найти количество ячеек соответствующих cells(2, 5)

Спасибо.

 

Dima S

Пользователь

Сообщений: 2063
Регистрация: 01.01.1970

#2

27.01.2014 11:13:55

Код
lr = cells(rows.count,2).end(xlup).row
for i = 2 to lr
if cells(i,5) = cells(2,5) then n = n+1 'n и есть ваше количество
next

только зачем там аж vba?
задачка то на СЧЁТЕСЛИ

Изменено: Dima S27.01.2014 11:15:51

 

Z

Пользователь

Сообщений: 6111
Регистрация: 21.12.2012

Win 10, MSO 2013 SP1

#3

27.01.2014 11:15:25

Цитата
Пытался сам найти, но безнадежно.

Не унывайте — в поиск — ищущий да обрящет! А чтобы по каждому чиху в аптеку (на форум) не бегать, то «аптечку» иметь…  ;)  
— VBA для начинающих —

http://www.google.com/search?q=VBA+%d0%b4%d0%bb%d1%8f+%d0%bd%d0%b0%d1%87%d0%b8%d0%bd%d0%b­0%d1%8e%d1%89%d0%b8%d1%85

«Ctrl+S» — достойное завершение ваших гениальных мыслей!.. ;)

 

Dima S, я к VBA прибег только из-за того, чтоб от формул уйти, вес большой получается.
Z, Либо спрашиваю неправильно, либо не совсем понимаю что предлагают.) Но я учусь, самому неинтересно на готовенькое, интересней и приятней лично задачку решить.)

 

Dima S

Пользователь

Сообщений: 2063
Регистрация: 01.01.1970

#5

27.01.2014 11:32:43

Цитата
самому неинтересно на готовенькое

Z

как раз и предложил вам ссылку на учебники по vba)

 

Dima S,забыл указать что критерий сдвигается, cells(i, 5)  получится.)
Я скачал учебник, учу пока.

 

Dima S

Пользователь

Сообщений: 2063
Регистрация: 01.01.1970

#7

27.01.2014 11:54:57

Цитата
критерий сдвигается, cells(i, 5) получится

cells(i-1, 5) наверное?

 

Dima S, Если смотреть на вложение, то я хочу сделать так чтоб критерий смещался. и во всех строках где есть «Парогениратор» в нужную ячейку вносилось количество ячеек содержащих это слово, в данном случае 3:
Парогениратор      3
Парогениратор      3
Парогениратор      3

 

Dima S

Пользователь

Сообщений: 2063
Регистрация: 01.01.1970

#9

27.01.2014 12:13:06

Цитата
забыл указать что критерий сдвигается, cells(i, 5) получится.)

куда сдвигается?
код использовать пробовали?
там как раз 3 и получится

з.ы. все, понял )

Изменено: Dima S27.01.2014 12:14:07

 

Dima S, Это если критерий остается неподвижным. У меня ~ 40 000 строк, и в каждой я хочу указать кол-во  одинаковых ячеек (количество операций в год, для ППР чтобы потом подвязать факт выполнения и вычислить % отклонения от ППР, если кому интересно для чего) ) .

Если взять простую формулу, то это было бы так:
=СЧЁТЕСЛИ(E$2:E$50000;E2)
Но она уходит на минут 15 пересчета и сильно грузит фал.

Изменено: kolyambus55rus28.01.2014 01:25:35

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

Ставьте эту счётесли() кодом, меняйте на значение. Но процесс небыстрый.
Если делать быстрее/иначе — то осваивайте словарь. В два прохода по массиву данных — на первом считаем в словаре количество повторов, на втором заносим их в массив.

 

Z

Пользователь

Сообщений: 6111
Регистрация: 21.12.2012

Win 10, MSO 2013 SP1

#12

27.01.2014 12:33:56

Цитата
чтобы потом подвязать факт выполнения и вычислить

Нормальные герои всегда идут…
Имейте нормальные, без перегруза, данные и вычислить многое вполне по силам СВОДНОЙ — рекомендую —

http://www.planetaexcel.ru/techniques/8/

.

Но если главная хотелка макросами впихнуть формулу, чтобы

Цитата
40 000 строк, и в каждой я хочу указать кол-во одинаковых ячеек

то хо-о-о-рошенько подумайте — оно это надоть?!.  ;)

Изменено: Z27.01.2014 12:34:28

«Ctrl+S» — достойное завершение ваших гениальных мыслей!.. ;)

 

Z, надоть, надоть.)  В сводной я отображу плановую неделю в которой будет  отклонение по выполнению.

 

kolyambus55rus

Пользователь

Сообщений: 67
Регистрация: 22.01.2014

#14

27.01.2014 14:12:14

Друзья:

Код
Dim ir As Long
Dim iSource As Range
iLastCell = Cells(2, 15).SpecialCells(xlLastCell).Row
Set iSource = Range(Cells(2, 15), Cells(iLastCell, 15))
ir = 2
 For Each Cell In iSource
  iText = Cells(ir, 15).Value
  iCount = Application.WorksheetFunction.CountIf(iSource, iText)
   Cells(ir, 14).Value = iCount
  ir = ir + 1
 Next
 

Считает прекрасно и быстро, он косяк в одном — считает пустые, и из-за этого пропадает надолго, как от этого уйти!?

Учусь,еще…

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#15

27.01.2014 14:29:44

Определяйте последнюю строку по тому столбцу, где нужные данные — поменяйте номер столбца:

Код
iLastRow = Cells(Rows.Count, 11).End(xlUp).Row
 
 

Юрий М, не пракатило, стопарица с ошибкой…

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Я же не вижу, где у Вас на листе столбец с исходными данными… Я показал, как найти последнюю строку по столбцу 11

 

kolyambus55rus

Пользователь

Сообщений: 67
Регистрация: 22.01.2014

#18

28.01.2014 04:55:13

Юрий М, все работает, спасибо! Я просто в строке

Код
Set iSource = Range(Cells(2, 15), Cells(iLastRow, 15)) 

не указал

Код
iLastRow

Вот полный рабочий код (пригодится кому нибудь)

Код
Dim ir As Long
Dim iSource As Range
iLastRow = Cells(Rows.Count, 15).End(xlUp).Row
Set iSource = Range(Cells(2, 15), Cells(iLastRow, 15))
ir = 2
 For Each Cell In iSource
  iText = Cells(ir, 15).Value
  iCount = Application.WorksheetFunction.CountIf(iSource, iText)
   Cells(ir, 14).Value = iCount
  ir = ir + 1
 Next
 

Учусь,еще…

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

vba count syntax

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

vba count values

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.

vba count diff counta

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 count diff count blanks

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!

automacro

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.

vba count countif eg

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.

vba count static

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 formula test count formula

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

vba count formula r1c1

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

VBA Count-Updated

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

VBA Count Example 1

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

VBA Count Example 1-1

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

VBA Count Example 1-2

Step 4: Now supply the range as A1 to A7.

Code:

Sub Count_Example1()

Range("C2").Value = WorksheetFunction.Count(Range("A1:A7"))

End Sub

VBA Count Example 1-3

These are three simple steps to arrive at the result.

Now, run the code to see the result in cell C2.

VBA Count Example 1-4

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

VBACount Example 1-5

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 1-6

VBA Count Example #2

Look at one more example with the COUNT function. For this example, look at the below data.

VBACount Example 2

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

Example 2-1

When we execute the above code manually or using the F5 key, we get the result as 5.

VBA Count Example 2-2

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

Кол-во не пустых значений в первой колонке.
Application.WorksheetFunction.CountA(Columns(1))
Кол-во значений раных 1 в первой колонке
Application.WorksheetFunction.CountIf(Columns(1), ‘1’)

natalie

19.10.2010, 14:15

4

вам надо посчитать только те значения, которые не равны пустому???
тогда используйте count()

0 / 0 / 0

Регистрация: 23.05.2010

Сообщений: 57

19.10.2010, 15:12

 [ТС]

5

Спасибо всем, прокатило! =))



0



Like this post? Please share to your friends:
  • Vba excel подключить библиотеку word
  • Vba excel повторить символ
  • Vba excel по шагам
  • Vba excel по модулю переменной
  • Vba excel по методу sort