Vba excel посчитать количество заполненных строк
Как определить последнюю ячейку на листе через VBA?
Очень часто при внесении данных на лист Excel возникает вопрос определения последней заполненной или первой пустой ячейки. Чтобы впоследствии с этой первой пустой ячейки начать заносить данные. В этой теме я опишу несколько способов определения последней заполненной ячейки.
В качестве переменной, которой мы будем присваивать номер последней заполненной строки, у нас во всех примерах будет lLastRow. Объявлять мы её будем как Long . Для экономии памяти можно было бы использовать и тип Integer, но т.к. строк на листе может быть больше 32767(это максимальное допустимое значение переменных типа Integer ) нам понадобиться именно Long , во избежание ошибки. Подробнее про типы переменных можно прочитать в статье Что такое переменная и как правильно её объявить
Одинаковые переменные для всех примеров
lLastCol = Cells(1, Columns.Count).End(xlToLeft).Column
Данный метод лишен недостатков, присущих второму и третьему способам. Однако есть другой, в определенных ситуациях даже полезный: при таком методе определения игнорируются строки, скрытые фильтром, группировкой или командой Скрыть (Hide) . Т.е. если последняя строка таблицы будет скрыта, то данный метод вернет номер последней видимой заполненной строки, а не последней реально заполненной.
Способ 2:
Определение последней заполненной строки через SpecialCells
Определение последнего столбца через SpecialCells
Я этот метод использую только для определения в только что созданном документе, в котором только добавляю строки.
Способ 3:
Определение последней строки через UsedRange
Определение последнего столбца через UsedRange
Способ 4:
Определение последней строки и столбца, а так же адрес ячейки методом Find
Однако данный метод не будет учитывать в просмотре скрытые строки и столбцы. Это следует учитывать при его применении.
небольшой практический код , который поможет вам понять, как использовать полученную переменную:
А такой код выделит диапазон ячеек в столбцах с А по С, определяя последнюю ячейку по столбцу A этого же листа:
А вот такой код скопирует ячейку B1 в первую пустую ячейку столбца A этого же листа:
Статья помогла? Поделись ссылкой с друзьями!
Excel vba количество заполненных строк
Перминов Игорь
Автор
Ограничимся двумя колонками: A, B. Пропустим все остальные. Вот если значения в ячейках An и Bn пусты (ISNULL()) то будем считать, что данных больше нет.
Но возможен вариант когда:
A1 и B1 не пусты
A2 и B2 пусты (собственно пропуск)
A3 и B3 не пусты
Crispy
Ну тогда напрашивается просто совместить перебор с определением последней строки.
Т.е. получаем номер строки, используя xlLastCell, а затем делаем цикл до нее, подсчитывая непустые.
Т.е. в синтаксисе макроса определение последней непустой строки листа выглядит примерно так:
И далее обычный For. Next дает нужное.
ry
Владимир Максимов
Впрочем, можно сканировать строки и подсчитывать количество значений по строке. Но тут проблема, как вызвать функцию COUNTA() не записывая ее в ячейку? Т.е. чтобы она просто вернула значение.
Хотя, подозреваю, что в данном случае нужно всего-лишь знать адрес последней заполненной строки.
Исправлено: Владимир Максимов, 24.09.10 11:06
Перминов Игорь
Автор
Владимир МаксимовХотя, подозреваю, что в данном случае нужно всего-лишь знать адрес последней заполненной строки.[/quote
Правильно.
Вот это дает то что нужно
Pliskin
Crispy
Твое выражение однако у меня например дает 65536.
А последнюю непустую строку дает как раз-таки то, которое я приводил выше.
Перминов Игорь
Автор
Хм.
У меня на всех файлах которые тестировал-все правильно показывает.
Хорошо. Как альтернативный вариан (или как основной, зависит от результатов) буду пользовать твой пример.
Владимир Максимов
Создаю новый лист Excel. Создаю макрос
Все функции показывают 10. Ту строку, в которую и была записана информация. Однако.
Igor Korolyov
rubinov
Однако с формулами и linked cells могут быть нюансы
Crispy
Excel vba количество заполненных строк
Для работы со строками существует большое количество функций (таблица. Функции работы со строками).
Таблица «Функции работы со строками»
Для сравнения строковых значений можно использовать обычные операторы сравнения числовых значений, так как при сравнении символов сравниваются их двоичные коды.
Следующие три функции позволяют работать с массивом строк
Эта функция имеет четыре аргумента:
Еще три функции обеспечивают преобразование строк:
И последние две функции генерируют строки символов
Пример
1 метка: сообщается длина строки, введенной в первое текстовое поле (1 строка);
2 метка: преобразует все символы третьего текстового поля (3 строка) в заглавные буквы;
3 метка: выводит вместе содержание первого и второго текстовых полей (1 и 2 строки).
Хороший фреймворк (framework) лучшее решение для безпроблемной работы со строками.
Технология выполнения
- Откройте приложение Word, сохраните документ и перейдите в редактор VBA.
- Создайте форму аналогично приведенному рисунку.
- Пропишите обработчик события кнопки ОК.
- Откомпилируйте программу.
- Запустите форму на выполнение.
Форма примера в режиме конструктора и в рабочем состоянии
Excel vba количество заполненных строк
Продолжаем наш разговор про объект Excel Range , начатый в первой части. Разберём ещё несколько типовых задач и одну развлекательную. Кстати, в процессе написания второй части я дополнил и расширил первую, поэтому рекомендую её посмотреть ещё раз.
Примеры кода
Типовые задачи
Перебор ячеек диапазона (вариант 4)
Работа с текущей областью
Excel умеет автоматически определять текущую область вокруг активной ячейки. Соответствующая команда на листе вызывается через Ctrl + A . Через ActiveCell мы посредством свойства Worksheet легко выходим на лист текущей ячейки, а уже через него можем эксплуатировать свойство UsedRange , которое и является ссылкой на Range текущей области. Чтобы понять, какой диапазон мы получили, мы меняем цвет ячеек. Функция GetRandomColor не является стандартной, она определена в модуле файла примера.
Определение границ текущей области
Выделение столбцов / строк текущей области
Тут нет ничего нового, мы всё это обсудили в предыдущем примере. Мы получаем ссылки на столбцы / строки, меняя их цвет для контроля результата работы кода.
Сброс форматирования диапазона
Поиск последней строки столбца (вариант 1)
Поиск последней строки столбца (вариант 2)
Ещё один вариант.
Тут показывается, как найти на листе ячейку, ниже и правее которой находятся только пустые ячейки. Соответственно данные надо искать в диапазоне от A1 до этой ячейки. На эту ячейку можно перейти через Ctrl + End . Как этим воспользоваться в VBA показано ниже:
Разбор клипо-генератора
Ну, и в качестве развлечения и разрядки взгляните на код клипо-генератора, который генерирует цветные квадраты в заданных границах экрана. На некоторых это оказывает умиротворяющий эффект 🙂
По нашей теме в коде обращает на себя внимание использование свойства ReSize объекта Range . Как не трудно догадаться, свойство расширяет (усекает) текущий диапазон до указанных границ, при этом левый верхний угол диапазона сохраняет свои координаты. А также посмотрите на 2 последние строчки кода, реализующие очистку экрана. Там весьма показательно использован каскад свойств End и Offset .
Подсчет числа строк в Microsoft Excel
При работе в Excel иногда нужно подсчитать количество строк определенного диапазона. Сделать это можно несколькими способами. Разберем алгоритм выполнения этой процедуры, используя различные варианты.
Определение количества строк
Существует довольно большое количество способов определения количества строк. При их использовании применяются различные инструменты. Поэтому нужно смотреть конкретный случай, чтобы выбрать более подходящий вариант.
Способ 1: указатель в строке состояния
Самый простой способ решить поставленную задачу в выделенном диапазоне – это посмотреть количество в строке состояния. Для этого просто выделяем нужный диапазон. При этом важно учесть, что система считает каждую ячейку с данными за отдельную единицу. Поэтому, чтобы не произошло двойного подсчета, так как нам нужно узнать количество именно строк, выделяем только один столбец в исследуемой области. В строке состояния после слова «Количество» слева от кнопок переключения режимов отображения появится указание фактического количества заполненных элементов в выделенном диапазоне.
Правда, случается и такое, когда в таблице нет полностью заполненных столбцов, при этом в каждой строке имеются значения. В этом случае, если мы выделим только один столбец, то те элементы, у которых именно в той колонке нет значений, не попадут в расчет. Поэтому сразу выделяем полностью конкретный столбец, а затем, зажав кнопку Ctrl кликаем по заполненным ячейкам, в тех строчках, которые оказались пустыми в выделенной колонке. При этом выделяем не более одной ячейки на строку. Таким образом, в строке состояния будет отображено количество всех строчек в выделенном диапазоне, в которых хотя бы одна ячейка заполнена.
Но бывают и ситуации, когда вы выделяете заполненные ячейки в строках, а отображение количества на панели состояния так и не появляется. Это означает, что данная функция просто отключена. Для её включения кликаем правой кнопкой мыши по панели состояния и в появившемся меню устанавливаем галочку напротив значения «Количество». Теперь численность выделенных строк будет отображаться.
Способ 2: использование функции
Но, вышеуказанный способ не позволяет зафиксировать результаты подсчета в конкретной области на листе. К тому же, он предоставляет возможность посчитать только те строки, в которых присутствуют значения, а в некоторых случаях нужно произвести подсчет всех элементов в совокупности, включая и пустые. В этом случае на помощь придет функция ЧСТРОК. Её синтаксис выглядит следующим образом:
Её можно вбить в любую пустую ячейку на листе, а в качестве аргумента «Массив» подставить координаты диапазона, в котором нужно произвести подсчет.
Для вывода результата на экран достаточно будет нажать кнопку Enter.
Причем подсчитываться будут даже полностью пустые строки диапазона. Стоит заметить, что в отличие от предыдущего способа, если вы выделите область, включающую несколько столбцов, то оператор будет считать исключительно строчки.
Пользователям, у которых небольшой опыт работы с формулами в Экселе, проще работать с данным оператором через Мастер функций.
-
Выделяем ячейку, в которую будет производиться вывод готового итога подсчета элементов. Жмем на кнопку «Вставить функцию». Она размещена сразу слева от строки формул.
Запускается небольшое окно Мастера функций. В поле «Категории» устанавливаем позицию «Ссылки и массивы» или «Полный алфавитный перечень». Ищем значение «ЧСТРОК», выделяем его и жмем на кнопку «OK».
Открывается окно аргументов функции. Ставим курсор в поле «Массив». Выделяем на листе тот диапазон, количество строк в котором нужно подсчитать. После того, как координаты этой области отобразились в поле окна аргументов, жмем на кнопку «OK».
Способ 3: применение фильтра и условного форматирования
Но бывают случаи, когда нужно подсчитать не все строки диапазона, а только те, которые отвечают определенному заданному условию. В этом случае на помощь придет условное форматирование и последующая фильтрация
-
Выделяем диапазон, по которому будет производиться проверка на выполнение условия.
Переходим во вкладку «Главная». На ленте в блоке инструментов «Стили» жмем на кнопку «Условное форматирование». Выбираем пункт «Правила выделения ячеек». Далее открывается пункт различных правил. Для нашего примера мы выбираем пункт «Больше…», хотя для других случаев выбор может быть остановлен и на иной позиции.
Открывается окно, в котором задается условие. В левом поле укажем число, ячейки, включающие в себя значение больше которого, окрасятся определенным цветом. В правом поле существует возможность этот цвет выбрать, но можно и оставить его по умолчанию. После того, как установка условия завершена, жмем на кнопку «OK».
Как видим, после этих действий ячейки, удовлетворяющие условию, были залиты выбранным цветом. Выделяем весь диапазон значений. Находясь во все в той же вкладке «Главная», кликаем по кнопке «Сортировка и фильтр» в группе инструментов «Редактирование». В появившемся списке выбираем пункт «Фильтр».
После этого в заглавиях столбцов появляется значок фильтра. Кликаем по нему в том столбце, где было проведено форматирование. В открывшемся меню выбираем пункт «Фильтр по цвету». Далее кликаем по тому цвету, которым залиты отформатированные ячейки, удовлетворяющие условию.
Как видим, существует несколько способов узнать количество строчек в выделенном фрагменте. Каждый из этих способов уместно применять для определенных целей. Например, если нужно зафиксировать результат, то в этом случае подойдет вариант с функцией, а если задача стоит подсчитать строки, отвечающие определенному условию, то тут на помощь придет условное форматирование с последующей фильтрацией.
Возможно, вы часто использовали функции COUNT и COUNTA в Microsoft Excel. При этом COUNT захватывает все числовые значения в ячейке, COUNTA захватывает все непустые ячейки (включая строки). Можно ли каким-либо образом использовать функцию COUNTA через VBA? Абсолютно да! Вы можете использовать функцию COUNTA через VBA в качестве функции рабочего листа (так как она является частью семейства WorksheetFunction внутри VBA) для подсчета непустых ячеек через заданный диапазон рабочего листа. Преимущество функции COUNTA над COUNT заключается в том, что она может считать все (числа, строки, специальные символы, значения ошибок и т. Д.), Кроме пустых ячеек в данном диапазоне, тогда как COUNT может считать только количество ячеек, состоящих из числовых значений.,
Синтаксис VBA COUNTA:
Синтаксис функции VBA COUNTA показан ниже:
Эта функция может принимать до 30 аргументов за один вызов. Аргумент может состоять из диапазона ячеек или одного значения, которое вводится вручную.
Как использовать функцию COUNTA в Excel VBA?
Ниже приведены различные примеры использования функции COUNTA в Excel с использованием кода VBA.
Вы можете скачать этот шаблон VBA COUNTA Excel здесь - Шаблон VBA COUNTA Excel
Пример № 1 - VBA COUNTA с ручными аргументами в качестве входных данных
Мы увидим, как работает функция COUNTA, когда мы предоставим ей ручные аргументы в VBA. Выполните следующие шаги:
Шаг 1. Вставьте новый модуль в редактор Visual Basic (VBE). Нажмите на вкладку Вставка > выберите модуль.
Шаг 2: Определите новую подпроцедуру во вновь вставленном модуле, которая может содержать ваш макрос.
Код:
Шаг 3: Решите, где мы хотим сохранить выходные данные для функции COUNTA. Я хочу сохранить его в ячейке A2 листа с именем « Пример 1 ». Для этого нам нужно использовать метод Sheets.Range в VBA. Смотрите следующий скриншот для справки:
Код:
Этот фрагмент кода выбирает ячейку A2 в качестве диапазона из листа с именем Пример 1.
Шаг 4: Используйте оператор присваивания, чтобы мы могли присвоить значение ячейке, к которой будет осуществляться доступ, с помощью кода выше. Добавьте объект с именем WorksheetFunction, чтобы мы могли получить доступ к функции COUNTA под ним.
Код:
Шаг 5: Поставьте точку (.) После указанного объекта, и вы увидите список функций, доступных для использования под ним. Выберите COUNTA из списка нескольких доступных функций, который позволяет подсчитывать непустые ячейки или значения.
Код:
Шаг 7: Запустите этот фрагмент кода, нажав F5 или кнопку Run, и просмотрите результат под ячейкой A2 листа « Пример 1 » в активной рабочей книге.
В этом коде мы хотим, чтобы система посчитала входные аргументы и сохранила счет под ячейкой A2 в примере 1.
Пример № 2 - VBA COUNTA для подсчета непустых ячеек в заданном диапазоне
Предположим, у меня есть данные по всему столбцу A, и мне нужно посчитать, что является непустыми строками во всем столбце. Поскольку весь столбец состоит из более чем 10 строк Lac, для меня является идеальным трудоемким переходом и подсчетом каждой непустой ячейки. Смотрите частичный скриншот данных ниже.
Выполните следующие шаги:
Шаг 1: Определите новую подпроцедуру, которая может содержать ваш макрос.
Код:
Шаг 2: Определите две новые переменные в этой подпроцедуре как Range, используя Dim . Одна переменная будет полезна для хранения диапазона столбца входного аргумента, а другие переменные будут полезны для хранения ячейки, в которой мы хотим получить результат в виде подсчитанного числа.
Код:
Здесь rng_1 сохранит диапазон ввода для функции COUNTA. Вывод COUNTA будет сохранен в переменной op_cell .
Шаг 3: Теперь установите диапазон для обеих переменных, используя свойство VBA Set. Это должно быть сделано, потому что мы не можем напрямую присвоить значение переменной, определенной как объект диапазона.
Код:
Здесь переменная rng_1 была установлена в диапазон всего столбца с именем A. op_cell установлена в ячейку B1, поскольку это будет ячейка, которая содержит выходные данные COUNTA.
Шаг 4: Теперь используйте общий оператор присваивания для переменной op_cell, чтобы мы могли сохранить выходные данные в ячейке, для которой установлена эта переменная. Это может рассматриваться как выходная инициализация.
Код:
Шаг 5: Используйте объект WorksheetFunction в правой части оператора присваивания (это будет выражение, которое будет оценено, и значение будет сохранено в ячейке с переменной op_cell), чтобы инициализировать класс, к которому мы можем обращаться, а также использовать Функция COUNTA.
Код:
Шаг 6: Как только вы нажмете точку (.) После объекта WorksheetFunction, вы сможете получить доступ ко всем функциям, доступным в этом классе. Перейдите к функции COUNTA и дважды щелкните по ней, чтобы выбрать.
Шаг 7: Используйте переменную rng_1 в качестве входного аргумента в COUNTA. Следовательно, эта функция в классе объектов функций рабочего листа может подсчитывать непустые ячейки, присутствующие во всем столбце A.
Код:
Шаг 8: Запустите этот код, нажав F5 или кнопку Run, и вы увидите результат, как показано ниже, в ячейке B1 активного листа из рабочей книги.
В ячейке B1 мы можем видеть число как 17. Это означает, что у нас есть 17 непустых ячеек в столбце A рабочего листа. Вы можете вообще не видеть 17 на этом скриншоте, так как он является частичным. Вы могли бы лучше видеть рабочий лист и перемещаться по столбцу А.
То, что нужно запомнить
- Вы можете использовать функцию VBA COUNTA, когда вам нужно посчитать количество непустых ячеек, присутствующих в данном диапазоне.
- COUNTA рассматривает все значения, такие как числа, строки, значения ошибок, логические значения, пустой текст («»). Однако он не учитывает пустую ячейку.
- Пустые ячейки не будут учитываться с помощью функции COUNTA и будут игнорироваться.
- Вы можете использовать аргументы вручную в функции VBA COUNTA, и она все еще работает.
Рекомендуемые статьи
Это руководство к функции VBA COUNTA. Здесь мы обсудим, как использовать функцию COUNTA в Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -
Переменную, которой присваивается номер последней строки, следует объявлять как Long или Variant, например: Dim PosStr As Long . В современных версиях Excel количество строк на рабочем листе превышает максимальное значение типа данных Integer.
Таблица в верхнем левом углу
В первую очередь рассмотрим все доступные варианты поиска номера последней заполненной строки для таблиц, расположенных в верхнем левом углу рабочего листа. Такие таблицы обычно представляют собой простые базы данных в Excel, или, как их еще называют, наборы записей.
Пример таблицы с набором данных в Excel
Вариант 1
Основная формула для поиска последней строки в такой таблице, не требующая соблюдения каких-либо условий:
PosStr = Cells(1, 1).CurrentRegion.Rows.Count
Вариант 3
В первом столбце таблицы не должно быть пропусков, а также в таблице должно быть не менее двух заполненных строк, включая строку заголовков:
PosStr = Cells(1, 1).End(xlDown).Row
Вариант 4
В первой колонке рабочего листа внутри таблицы не должно быть пропусков, а ниже таблицы в первой колонке не должно быть других заполненных ячеек:
PosStr = WorksheetFunction.CountA(Range("A:A"))
Вариант 5
Ниже таблицы не должно быть никаких записей:
PosStr = Cells.SpecialCells(xlLastCell).Row
Последняя строка любой таблицы
Последнюю заполненную строку для любой таблицы будем искать, отталкиваясь от ее верхней левой ячейки: Cells(a, b) .
Вариант 1
Основная формула для поиска последней строки в любой таблице, не требующая соблюдения каких-либо условий:
PosStr = Cells(a, b).CurrentRegion.Cells(Cells(a, b).CurrentRegion.Cells.Count).Row
Вариант 2
Дополнительная формула с условием, что в первом столбце таблицы нет пустых ячеек:
PosStr = Cells(a, b).End(xlDown).Row
Если у вас на рабочем листе Excel есть записи вне таблиц, следите за тем, чтобы таблицы были окружены пустыми ячейками или пустыми ячейками и границами листа. Тогда не будет случайно внесенных заметок, примыкающих к таблицам, которые могут отрицательно повлиять на точность вычисления номера последней строки из кода VBA.
В принципе посчитать кол-во НЕ ПУСТЫХ строк на листе EXCEL просто,перебираем все строки в определенной колонке и если пусто, то заканчиваем:
Но может случиться так, что возможны пропуски между строками, тогда такой алгоритм работать не будет.
А средствами самого EXCEL это можно сделать?
Тут надо формализовать, что значит "пропуски между строками". Строка (ряд) не имеет НИ ОДНОЙ заполненной значениями ячейки?
------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку". "(с)
Действительно - что такое "пустая"? Тут видимо нужна проверка по всем (или ограничиваясь разумными пределами) столбцам.
А кстати посчитать общее число строк можно проще, без перебора - сразу перейдя к самой последней ячейке, т.е. к xlLastCell.
------------------
В действительности все иначе, чем на самом деле.
(Антуан де Сент-Экзюпери) Но может случиться так, что возможны пропуски между строками
Тут надо формализовать, что значит "пропуски между строками". Строка (ряд) не имеет НИ ОДНОЙ заполненной значениями ячейки?
Ограничимся двумя колонками: A, B. Пропустим все остальные. Вот если значения в ячейках An и Bn пусты (ISNULL()) то будем считать, что данных больше нет.
Но возможен вариант когда:
A1 и B1 не пусты
A2 и B2 пусты (собственно пропуск)
A3 и B3 не пусты
Ну тогда напрашивается просто совместить перебор с определением последней строки.
Т.е. получаем номер строки, используя xlLastCell, а затем делаем цикл до нее, подсчитывая непустые.
Т.е. в синтаксисе макроса определение последней непустой строки листа выглядит примерно так:
И далее обычный For. Next дает нужное.
------------------
В действительности все иначе, чем на самом деле.
(Антуан де Сент-Экзюпери)
Исправлено: Crispy, 24.09.10 09:42
Не совсем понял задачу. Нужно просто получить число непустых ячеек в столбце? Есть стандартная экселевская функция СЧЕТЗ (в VBA - COUNTA) - как раз подсчитывает непустые ячейки в заданном диапазоне (включая ячейки с текстом). ryНе совсем понял задачу. Нужно просто получить число непустых ячеек в столбце? Есть стандартная экселевская функция СЧЕТЗ (в VBA - COUNTA) - как раз подсчитывает непустые ячейки в заданном диапазоне (включая ячейки с текстом).
Количество не пустых ячеек совпадет с количеством строк, только если анализируется один столбец. Если же столбцов несколько, то рассчитать по количеству заполненных ячеек количество не пустых строк - не получится.
Впрочем, можно сканировать строки и подсчитывать количество значений по строке. Но тут проблема, как вызвать функцию COUNTA() не записывая ее в ячейку? Т.е. чтобы она просто вернула значение.
Хотя, подозреваю, что в данном случае нужно всего-лишь знать адрес последней заполненной строки.
Исправлено: Владимир Максимов, 24.09.10 11:06
Владимир МаксимовХотя, подозреваю, что в данном случае нужно всего-лишь знать адрес последней заполненной строки.[/quoteПравильно.
Вот это дает то что нужно
Перминов Игорь
Вот это дает то что нужно.
Твое выражение однако у меня например дает 65536.
А последнюю непустую строку дает как раз-таки то, которое я приводил выше.
------------------
В действительности все иначе, чем на самом деле.
(Антуан де Сент-Экзюпери) Перминов Игорь
Вот это дает то что нужно.
Твое выражение однако у меня например дает 65536.
А последнюю непустую строку дает как раз-таки то, которое я приводил выше.
Хм.
У меня на всех файлах которые тестировал-все правильно показывает.
Хорошо. Как альтернативный вариан (или как основной, зависит от результатов) буду пользовать твой пример.
У меня на всех файлах которые тестировал-все правильно показывает.
Хорошо. Как альтернативный вариан (или как основной, зависит от результатов) буду пользовать твой пример.
Создаю новый лист Excel. Создаю макрос
Все функции показывают 10. Ту строку, в которую и была записана информация. Однако.
- Функция End() не имеет "тормозов". Если в столбце не окажется ни одного значения, то она перейдет к самой последней ячейке, что видно по значению для поиска по 5 столбцу
- Функция UsedRange возвращает использованную область, но ведь область не обязана начинаться с 1 строки файла Excel. Т.е., в общем случае, ее использование довольно громоздко
- SpecialCells в данном синтаксисе - это ссылка правый нижний угол UsedRange. Т.е. это "облегченный" вариант использования UsedRange
xlLastCell к сожалению не даёт 100% результата - иногда "балует" (как правило в большую сторону - видимо в некоторых ячейках образуется "не совсем пустая пустота").
Для целей импорта из "типичной" корявой таблицы наверное имеет смысл сделать предварительно сортировку массива.
Перминов ИгорьДобрый день!
В принципе посчитать кол-во НЕ ПУСТЫХ строк на листе EXCEL просто,перебираем все строки в определенной колонке и если пусто, то заканчиваем:
Но может случиться так, что возможны пропуски между строками, тогда такой алгоритм работать не будет.
А средствами самого EXCEL это можно сделать?
Наверно так (для каждой колонки отдельно, здесь - для A):
Однако с формулами и linked cells могут быть нюансы
Исправлено: rubinov, 24.09.10 23:01
Igor KorolyovxlLastCell к сожалению не даёт 100% результата - иногда "балует" (как правило в большую сторону - видимо в некоторых ячейках образуется "не совсем пустая пустота").
Когда-то тоже обнаружил подобное, как бы некий "эффект остаточной памяти" у Excel. Т.е. похоже состояние очищенной ячейки все еще сохраняется в виде не Null в каком-то офисном буфере вплоть до перезагрузки Excel, проявляясь как нечто, совсем иное, чем в ячейке, куда ничего не записывалось. Из-за чего, пока Excel не перезагружен, в качестве xlLastCell все равно показывается по сути уже полностью очищенная на данный момент, бывшая до этого последней ячейка, так, как будто в ней прописано нечто иное, чем Null. Хотя по всем остальным признакам там ничего вроде бы и нет. В чем можно наглядно убедиться простейшим способом - записав в любую ячейку чистого листа что угодно, затем удалив клавишей Delete, после чего нажав Ctrl+End. Курсор неизменно будет оказываться на только что очищенной ячейке вплоть до перезагрузки Excel.
В OpenOffice Calc такое поведение уже не наблюдается. Там при очистке ячейки в нее сразу же однозначно возвращается значение Null, после чего эта ячейка ведет себя абсолютно так же, как и изначально пустая.
Читайте также: