powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel 2007. Как программно узнать количество строк автофильтра?
7 сообщений из 7, страница 1 из 1
Excel 2007. Как программно узнать количество строк автофильтра?
    #36247598
anton-sf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Есть таблица (прайс-лист).
В первом столбце юзер отмечает нужные позиии.
Например для печати или создания ценников.
Чтобы не перебирать весь прайс на эти отметки (for/next), есть автофильтр:

Dim table As ListOobject
Set table = Workbook("прайс.xlsm").Worksheets("прайс").ListObjects("тбл_прайс")
table.Range.AutoFilter 1,"<>"

Теперь вопрос - как узнать количество строк автофильтра?
То бишь отфильтрованных строк.

Я пробовал это:

table.AutoFilter.Range.Rows.Count

Но такой вариант почему-то выдаёт общее количество строк в таблице.

Хелм ми :)
...
Рейтинг: 0 / 0
Excel 2007. Как программно узнать количество строк автофильтра?
    #36247603
anton-sf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опс, са себе и отвечаю:

table.AutoFilter.Range.ListObject.ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Count

Сорри за оффтоп, но, вдруг кому-то понадобиться :)
...
Рейтинг: 0 / 0
Excel 2007. Как программно узнать количество строк автофильтра?
    #36257946
anton-sf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё вариант.

Дано:
Книга = "прайс.xlsm"
Лист = "прайс"
Таблица = "тбл_Прайс"
Столбцы = {1: "Метка", 2: "Наименование", 3: "Цена"}

Задача:
Программно получить количество отмеченных позиций в столбце "Метка" используя автофильтр.

Решение:
Public Function TableAutoFilter_RowsCount(ByVal field As Long) As Long
Dim table As ListObject

Application.ScreenUpdating = False
Set table = Workbook("прайс.xlsm").Worksheets("прайс").ListObjects("тбл_Прайс")
table.Range.AutoFilter field, "<>"
TableAutoFilter_RowsCount = table.DataBodyRange.SpecialCells(xlCellTypeVisible).Areas.Count
table.Range.AutoFilter.ShowAllData
Application.ScreenUpdating = True
End Function

...
Dim rows As Long
rows = TableAutoFilter_RowsCount(1)
...
...
Рейтинг: 0 / 0
Excel 2007. Как программно узнать количество строк автофильтра?
    #36258005
anton-sf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл упомянуть, что доступ именно к отфильтрованным данным получается только при включенной фильтрации и только через table.DataBodyRange. SpecialCells(xlCellTypeVisible).Areas

Пример:

Дано:
Книга = "прайс.xlsm"
Лист = "прайс"
Таблица = "тбл_Прайс"
Столбцы = {1: "Метка", 2: "Наименование", 3: "Цена"}

Задача:
Программно отфильтровать таблицу по столбцу "Метка"
Программно получить все значения строк столбца "Наименование" в отфильтрованной таблице

Решение:
...
Dim table As Long
Dim index As Long
Dim rows As Long
Dim column As Long
Dim value As String

Set table = Workbook("прайс.xlsm").Worksheets("прайс").ListObjects("тбл_Прайс")
column = table.ListColumns("Метка").Index
Application.ScreenUpdating = False
table.Range.AutoFilter column, "<>"
rows = table.DataBodyRange.SpecialCells(xlCellTypeVisible).Areas.Count
If rows > 0 Then
column = table.ListColumns("Наименование").Index
For index = 1 To rows
value = table.ListColumns(column).Range(table.DataBodyRange.SpecialCells(xlCellTypeVisible).Areas(index).row).Value
'--- что-то делаем с полученными данными ---
Next index
End If
Application.ScreenUpdating = True
...
...
Рейтинг: 0 / 0
Excel 2007. Как программно узнать количество строк автофильтра?
    #36258020
anton-sf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В последнем примере закралась позорная ошибка:
Dim table As Long
надо заменить на
Dim table As ListObject
...
Рейтинг: 0 / 0
Excel 2007. Как программно узнать количество строк автофильтра?
    #36258082
anton-sf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мммм, ещё проблема нарисовалась:
Areas содержит не строки, а диапазон строк!
Т.е. если у вас отфильтрованные строки имеют, например, такую нумерацию:
10
11
12
100
101
102
2000
2001
2002
то Areas возвращает значение 3, хотя строк 9!
Тут можно пробегать циклом по каждому Areas , благо Areas наследует Region .

Но мне это не очень нравиться.
Какое-то запутанное наследование в Office.
Что-же, буду ковырять дальше...
...
Рейтинг: 0 / 0
Excel 2007. Как программно узнать количество строк автофильтра?
    #36258370
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Debug.Print table.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel 2007. Как программно узнать количество строк автофильтра?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]