Подсчет количества ячеек в диапазоне в зависимости от их содержимого методами 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.
My first column is an index, with monotonously increasing numbers, which ends at a non predictable point.
Now I want to find out, how many entries this column has. Is there a better way than iterating throug this and watch out for an empty cell?
eli-k
10.7k11 gold badges43 silver badges44 bronze badges
asked Jul 14, 2010 at 9:27
If you want to find the last populated cell in a particular column, the best method is:
Range("A" & Rows.Count).End(xlUp).Row
This code uses the very last cell in the entire column (65536 for Excel 2003, 1048576 in later versions), and then find the first populated cell above it. This has the ability to ignore «breaks» in your data and find the true last row.
answered Oct 6, 2011 at 21:48
MrKowzMrKowz
2713 silver badges3 bronze badges
1
One way is to: (Assumes index column begins at A1)
MsgBox Range("A1").End(xlDown).Row
Which is looking for the 1st unoccupied cell downwards from A1 and showing you its ordinal row number.
You can select the next empty cell with:
Range("A1").End(xlDown).Offset(1, 0).Select
If you need the end of a dataset (including blanks), try: Range(«A:A»).SpecialCells(xlLastCell).Row
answered Jul 14, 2010 at 10:03
Alex K.Alex K.
170k30 gold badges263 silver badges286 bronze badges
2
You can also use
Cells.CurrentRegion
to give you a range representing the bounds of your data on the current active sheet
Msdn says on the topic
Returns a Range object that represents
the current region. The current region
is a range bounded by any combination
of blank rows and blank columns.
Read-only.
Then you can determine the column count via
Cells.CurrentRegion.Columns.Count
and the row count via
Cells.CurrentRegion.Rows.Count
answered Jul 14, 2010 at 10:18
almog.orialmog.ori
7,8291 gold badge35 silver badges49 bronze badges
1
You may also use:
UsedRange.Rows.Count
answered Jul 2, 2011 at 5:38
AMIBAMIB
3,1823 gold badges19 silver badges19 bronze badges
0
To find the last filled column use the following :
lastColumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Hugo Dozois
8,05712 gold badges53 silver badges58 bronze badges
answered Mar 6, 2013 at 18:13
0 / 0 / 0 Регистрация: 12.04.2013 Сообщений: 10 |
|
1 |
|
Подсчет непустых ячеек в столбце15.01.2014, 09:05. Показов 40200. Ответов 11
Всем доброго времени суток!
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
15.01.2014, 09:05 |
Ответы с готовыми решениями: Подсчет количества непустых ячеек диапазона Просуммируйте по столбцам содержимое непустых ячеек Перебор и печать непустых ячеек столбца Excel При значении ячеек в столбце А присвоить определенное значение ячейкам в столбце B 11 |
0 / 0 / 0 Регистрация: 12.04.2013 Сообщений: 10 |
|
15.01.2014, 11:13 [ТС] |
3 |
Смотрел. У меня, почему то, всё время выдаёт ошибку
0 |
RAVproFFI 33 / 33 / 1 Регистрация: 15.10.2013 Сообщений: 130 |
||||
15.01.2014, 11:32 |
4 |
|||
Можно также через массив
1 |
0 / 0 / 0 Регистрация: 12.04.2013 Сообщений: 10 |
|
15.01.2014, 14:43 [ТС] |
5 |
Всё работает!, но… можно ли сделать так, чтобы при выборе ячеек фильтром на странице, показывало бы значение только видимых ячеек???
0 |
RAVproFFI 33 / 33 / 1 Регистрация: 15.10.2013 Сообщений: 130 |
||||
15.01.2014, 14:48 |
6 |
|||
в смысле видимых? может строки скрыты а не ячейки? если так то добавить условие
1 |
0 / 0 / 0 Регистрация: 12.04.2013 Сообщений: 10 |
|
15.01.2014, 14:51 [ТС] |
7 |
Ты — гений!!!
0 |
33 / 33 / 1 Регистрация: 15.10.2013 Сообщений: 130 |
|
15.01.2014, 15:00 |
8 |
))) эт visual basic, не я придумал
0 |
HEnogapok 0 / 0 / 0 Регистрация: 12.04.2013 Сообщений: 10 |
||||
15.01.2014, 15:55 [ТС] |
9 |
|||
Ну, тогда обнаглею: как твоё творение присобачить вот сюда:
вот у меня там цикл по от нуля до трёх, а надо, чтобы в «То» подставлялось значение, полученное из твоего кода (количество видимых строк)??? Добавлено через 27 минут
0 |
33 / 33 / 1 Регистрация: 15.10.2013 Сообщений: 130 |
|
18.01.2014, 09:18 |
10 |
HEnogapok, если to сделать кол-во видимых строк, то в твоем цикле с offset может взять значение из скрытой строки. Может лучше заполнять addrs во время цикла где проверяется пуста и скрыта ли строка?
0 |
toiai 3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
||||
18.01.2014, 10:58 |
11 |
|||
Поскольку примера основного кода , предложу такой вариант (немного изменив Ваш):
0 |
0 / 0 / 0 Регистрация: 12.04.2013 Сообщений: 10 |
|
18.01.2014, 13:59 [ТС] |
12 |
Всё правильно. Так и замутил. Спасибо за помощь!
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
18.01.2014, 13:59 |
Помогаю со студенческими работами здесь Как в коде добавить условие подсчета среднего значения непустых ячеек Нужно что бы макрос случайным образом выбирал 100 непустых ячеек из столбцов Есть эксель файл, в нем есть лист номер 2, в нем столбцы A и B Нужно что бы… Сцепка ячеек построчно, выборка непустых значений из диапазона и подстановка их в одну ячейку а1: стул Подсчет суммы в столбце до первой пустой строки и новый подсчет В одном столбце таблицы БД заменить все пустые ячейки на содержимое ячеек в другом столбце из той же строки Есть таблица .dbf и надо в одном столбце заменить все пустые ячейки на содержимое… Подсчёт непустых ячеек во всём столбце и особый диапазон 1. Есть функция… Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 12 |
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.
ALFA Пользователь Сообщений: 243 |
Подскажите, как, открыв макросом стороннюю книгу, можно на определенном ее листе посчитать кол-во заполненных ячеек в столбце A. |
hk1209 Пользователь Сообщений: 271 |
|
ALFA Пользователь Сообщений: 243 |
Set wb2 = Workbooks.Open(«C:UsersU_M06TTDesktopExcelКачествоМарт 2014.xls», 0, 1) ‘открыл книгу Скажите что еще написать, я в этом не оч силен. |
ALFA Пользователь Сообщений: 243 |
#4 15.05.2014 20:31:10 Нашел решение, всем спасибо!
|
||
Scripter Пользователь Сообщений: 255 |
#5 16.05.2014 01:48:48 так кол-во заполненных
так номер последней строки
Изменено: Scripter — 16.05.2014 08:58:46 |
||||
ALFA Пользователь Сообщений: 243 |
А если необходимо открыв книгу, посчитать Кол-во заполненных ячеек, предварительно выбрав лист, как использовать Worksheetfunction.CountA(Columns(1)) |
Scripter Пользователь Сообщений: 255 |
#7 16.05.2014 17:44:27 Если нужно чтоб при открытии книги срабатывал код, то нужно поместить код в «Эта книга»
Если вам нужно посчитать ВСЕ заполненные (не найти последнюю строку) ячейки на листе:
В определенном столбце
или
Найти последнюю строку на листе, если последнее значение которое увеличивает диапазон может быть в любом столбце
Найти последнюю строку на листе по определенному полю
Изменено: Scripter — 16.05.2014 17:48:46 |
|||||