Vba подсчет заполненных ячеек в excel

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's user avatar

eli-k

10.7k11 gold badges43 silver badges44 bronze badges

asked Jul 14, 2010 at 9:27

poeschlorn's user avatar

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.

praegustator's user avatar

answered Oct 6, 2011 at 21:48

MrKowz's user avatar

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

Community's user avatar

answered Jul 14, 2010 at 10:03

Alex K.'s user avatar

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.ori's user avatar

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

AMIB's user avatar

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's user avatar

Hugo Dozois

8,05712 gold badges53 silver badges58 bronze badges

answered Mar 6, 2013 at 18:13

deva ruban's user avatar

 

ALFA

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

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

Подскажите, как, открыв макросом стороннюю книгу, можно на определенном ее листе посчитать кол-во заполненных ячеек в столбце A.

 

hk1209

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

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

 

ALFA

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

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

Set wb2 = Workbooks.Open(«C:UsersU_M06TTDesktopExcelКачествоМарт 2014.xls», 0, 1)   ‘открыл книгу
Далее необходимо посчитать кол-во заполненных ячеек в файле Март 2014.xls   sheets(«данные»).range(«A:A»)

Скажите что еще написать, я в этом не оч силен.

 

ALFA

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

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

#4

15.05.2014 20:31:10

Нашел решение, всем спасибо!

Код
ThisWorkbook.Worksheets("данные".Activate 
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate 
k = ActiveCell.Row    'номер последней заполненной строки
 

Scripter

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

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

#5

16.05.2014 01:48:48

так кол-во заполненных

Код
Msgbox "Кол-во заполненных ячеек в столбце А: " & Worksheetfunction.CountA(Columns(1)) 

так номер последней строки

Код
Msgbox "Номер последней заполненной строки: " & Cells(Rows.Count,1).end(xlup).row 

Изменено: Scripter16.05.2014 08:58:46

 

ALFA

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

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

А если необходимо открыв книгу, посчитать Кол-во заполненных ячеек, предварительно выбрав лист, как использовать Worksheetfunction.CountA(Columns(1))

 

Scripter

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

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

#7

16.05.2014 17:44:27

Если нужно чтоб при открытии книги срабатывал код, то нужно поместить код в «Эта книга»

Если вам нужно посчитать ВСЕ заполненные (не найти последнюю строку) ячейки на листе:

Скрытый текст

В определенном столбце

Скрытый текст

или

Скрытый текст

Найти последнюю строку на листе, если последнее значение которое увеличивает диапазон может быть в любом столбце

Скрытый текст

Найти последнюю строку на листе по определенному полю

Скрытый текст

Изменено: Scripter16.05.2014 17:48:46

Andrey72

4 / 4 / 2

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

Сообщений: 62

1

29.04.2014, 13:31. Показов 11168. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Подскажите пожалуйста.
Есть код который определяет количество заполненных строк на листе:

VB.NET
1
Book.Worksheets(1).UsedRange.Rows.Count

вопросы:
1.Как определить количество заполненных ячеек в конкретной строке;
2.Как определить количество заполненных ячеек в конкретном столбце.
Надеюсь на вашу помощь.



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

29.04.2014, 13:31

4

Апострофф

Заблокирован

29.04.2014, 13:48

2

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата
Сообщение от GOOGLE

Для определения номера последней заполненной ячейки в конкретной строке или столбце можно воспользоваться свойством End об’екта Range и специальными константами xlToRight(= -4161), xlDown(=-4121)

Пример определения номера последней заполненной ячейки в конкретной строке и столбце.

Visual Basic
1
2
3
iRow = Columns(3).End(xlDown).Row 
iRow = Columns("C").End(xlDown).Row 
iClm = Rows(10).End(xlToRight).Column

Комментарий :
важно Этот вариант будет корректно работать только при условии, что данные в строке, или столбце начинаются с самой первой ячейки и не содержат пустых ячеек.

Вариант для Вашего случая

VB.NET
1
2
iRow = Book.Worksheets(1).Columns("C").End(xlDown).Row 
iClm = Book.Worksheets(1).Rows(10).End(xlToRight).Column



1



4 / 4 / 2

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

Сообщений: 62

29.04.2014, 14:01

 [ТС]

3

Благодарю, очень помогли и так быстро.
Наверно глупый вопрос задам, но подскажите еще что нужно включить или прописать в проекте чтобы он воспринимал такие константы типа xlDown, я все время пользовался числовыми шифрами (-4121)



0



Апострофф

Заблокирован

29.04.2014, 14:15

4

Раннее и позднее связывание, разберитесь с этим, примеров по теме в разделе много…



0



Andrey72

4 / 4 / 2

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

Сообщений: 62

01.05.2014, 18:33

 [ТС]

5

Возникла еще одна проблема, почему то код

VB.NET
1
iClm = Book.Worksheets(1).Rows(10).End(xlToRight).Column

приводит к неправильному отображению количества заполненных ячеек, так в некоторых строках книги Excel пишет что занято 16384 ячейки (все), удаление строки и даже создание нового листа приводит к такому же результату. Не пойму в чем дело

Добавлено через 16 минут
Опытным путем выяснил, что если заполнено в строке больше 1 ячейки (хотя бы 2) то все нормально отображает, а вот если 1 ячейка то не видит ее и показывает 16384



0



Подсчет количества ячеек в диапазоне в зависимости от их содержимого методами 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 на Excel, чтобы автоматизировать некоторые ругательные материалы… так что это будет звучать как полный нубийский вопрос, хотя я не очень хорошо знаком с объектами VBA и т.д.

Итак, мое задание:
Есть ли более элегантный способ узнать длину столбца? Моя первая колонка — это индекс с монотонно увеличивающимися числами, который заканчивается в не прогнозируемой точке.
Теперь я хочу узнать, сколько записей в этой колонке. Есть ли лучший способ, чем повторять это и следить за пустой ячейкой?

Greetz,
Poeschlorn

4b9b3361

Ответ 1

Один из способов: (Предположим, что индексный столбец начинается с A1)

MsgBox Range("A1").End(xlDown).Row

Что ищет 1-я незанятая ячейка вниз от A1 и показывает вам порядковый номер строки.

Вы можете выбрать следующую пустую ячейку с помощью:

Range("A1").End(xlDown).Offset(1, 0).Select

Если вам нужен конец набора данных (включая пробелы), попробуйте: Range ( «A: A» ). SpecialCells (xlLastCell).Row

Ответ 2

Если вы хотите найти последнюю заполненную ячейку в определенном столбце, лучший способ:

Range("A" & Rows.Count).End(xlUp).Row

В этом коде используется самая последняя ячейка во всем столбце (65536 для Excel 2003, 1048576 в более поздних версиях), а затем найдите первую заполненную ячейку над ней. Это позволяет игнорировать «перерывы» в ваших данных и найти истинную последнюю строку.

Ответ 3

Вы также можете использовать

Cells.CurrentRegion

чтобы дать вам диапазон, представляющий границы ваших данных на текущем активном листе

Msdn говорит по теме

Возвращает объект Range, который представляет текущий регион. Текущий регион — диапазон, ограниченный любой комбинацией пустых строк и пустых столбцов. Только для чтения.

Затем вы можете определить количество столбцов с помощью

Cells.CurrentRegion.Columns.Count

и количество строк через

Cells.CurrentRegion.Rows.Count

Ответ 4

Вы также можете использовать:

UsedRange.Rows.Count

Ответ 5

Чтобы найти последний заполненный столбец, используйте следующее:

lastColumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column

Знаете ли вы о каком-либо Excel VBA, который подсчитывает количество заполненных ячеек (с текстом / числом или комбинациями текста + числа)? Я старался =countif(A2:A2000,1=1) (с общими критериями, например, 1=1 всегда), но показывает ноль (0) для текстового столбца. Вы также можете предложить решения в VBA, если хотите. Спасибо.

2013-01-09 20:04

4

ответа

Решение

Формула =COUNTA(A2:A2000): подсчитываются непустые ячейки.

2013-01-09 20:40

Я думаю, что для ответа выше, это должно быть

Application.WorksheetFunction.CountA(Range("A2:A2000"))

Я всегда сталкивался с проблемами, не упоминая Range, потому что он рассматривает весь диапазон как единое целое.

2015-10-27 07:07

В VBA это WorksheetFunction.CountA(«A2:A2000»)

2013-04-26 22:44

Dim Coloumncount As Integer
Coloumncount = Application.WorksheetFunction.CountA([D1:D100])’подсчитать, сколько заполненных ячеек в столбце «D»

2016-04-15 07:26

Like this post? Please share to your friends:
  • Vba переключение листов excel vba
  • Vba пишем макрос для excel
  • Vba передать значение в переменную excel
  • Vba передать диапазон excel в массив
  • Vba параметры страницы excel