Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Vikarach
0 / 0 / 0
Регистрация: 22.05.2018
Сообщений: 6
1

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

22.05.2018, 13:18. Просмотров 225. Ответов 12
Метки нет (Все метки)

Здравствуйте, помогите, пожалуйста, посчитать количество строк в столбце с объединенными ячейками, таблица при этом отфильтрована по другому столбцу. "Sheets(1).AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count" - считает с учетом фильтра, но не видит объединенные ячейки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2018, 13:18
Ответы с готовыми решениями:

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

Узнать количество объединенных ячеек
Может кто подскажет как можно программно узнать количество объединенных строк...

Копирование отфильтрованных ячеек
Привет всем! Сильно не пинайте я ноль в ВБА. Есть таблица к ней применен...

Перенос отфильтрованных ячеек в новую книгу
Добрый день! Помогите сделать макрос рабочим. Option Explicit Sub...

Перенос объединенных ячеек
Добрый день, есть 2 документа в одном надо взять первые 5 ячеек(не...

12
Burk
483 / 360 / 107
Регистрация: 11.07.2014
Сообщений: 1,178
22.05.2018, 14:01 2
Vikarach, создал файл, в некоторых строках объединил ячейки первого и второго столбцов (по горизонтали), поставил фильтр на третий столбец. Запустил вашу строку кода, всё Ок, считает и объединенные. Может объединяете по вертикали? Не проверял
0
Vikarach
0 / 0 / 0
Регистрация: 22.05.2018
Сообщений: 6
22.05.2018, 14:44  [ТС] 3
Не считает
0
Вложения
Тип файла: xls Пример.xls (37.5 Кб, 5 просмотров)
Burk
483 / 360 / 107
Регистрация: 11.07.2014
Сообщений: 1,178
22.05.2018, 15:02 4
Vikarach, у вас объединение по вертикали. Обращение к объединенной ячейке по левому верхнему углу, вроде. Поэтому, наверно и считает две строки за одну, посмотрю.

Добавлено через 7 минут
Vikarach, Что значит не считает??? Посчитал в вашем примере строки по столбцу D вручную, получил 20. Запустил ваш макрос, тоже выдает 20. В чём хохма-то?
0
Vikarach
0 / 0 / 0
Регистрация: 22.05.2018
Сообщений: 6
22.05.2018, 15:20  [ТС] 5
Считать нужно первый столбец
0
Burk
483 / 360 / 107
Регистрация: 11.07.2014
Сообщений: 1,178
22.05.2018, 15:42 6
Vikarach, считать вручную удобнее по последнему, там все строки видны. А количество строк, если их считать по макросу, безразлично по какому столбцу их считать. Или вы хотите, чтобы объединенная ячейка из двух строк в столбце считалась за одну? тогда проверяйте свойство MergeCells
0
Vikarach
0 / 0 / 0
Регистрация: 22.05.2018
Сообщений: 6
22.05.2018, 15:46  [ТС] 7
Да, конечно, чтобы объединенная ячейка из двух строк в столбце считалась за одну, Вы правы. Спасибо за совет, проверю.
0
Burk
483 / 360 / 107
Регистрация: 11.07.2014
Сообщений: 1,178
22.05.2018, 16:27 8
Vikarach, проверить надо так
Visual Basic
1
n = Ячейка.MergeArea.Rows.Count 'больше 1 - объединенная
а до этого можно создать массив из отфильтрованных строк я так не делал, посмотрите ссылку
http://excelvba.ru/code/GetVisibleRowsArray
0
Vikarach
0 / 0 / 0
Регистрация: 22.05.2018
Сообщений: 6
22.05.2018, 16:36  [ТС] 9
Очень интересно, посмотрю, спасибо
0
pashulka
2402 / 1224 / 499
Регистрация: 01.12.2010
Сообщений: 2,477
22.05.2018, 21:24 10
Vikarach, При условии заполненности всех строк, полученных в результате применения фильтра, сработает такой вариант :

Visual Basic
1
MsgBox Application.Subtotal(3, [A:A]) - 1
0
Vikarach
0 / 0 / 0
Регистрация: 22.05.2018
Сообщений: 6
23.05.2018, 08:49  [ТС] 11
Спасибо всем, кто откликнулся. Пришлось копировать столбец после фильтра в другое место и считать количество там.
0
Burk
483 / 360 / 107
Регистрация: 11.07.2014
Сообщений: 1,178
23.05.2018, 20:22 12
Vikarach, вашу задачу можно решить следующим макросом, только надо его запускать через Разработчик - Макросы, а не через проект ВБА. Либо он будет работать в проекте начальный запуск с кнопки на листе или через разработчик.
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub proba()
i = 0
[A1].Select
Do While ActiveCell <> ""
i = i + 1
SendKeys "{DOWN}"
DoEvents
Loop
MsgBox "Число строк с учётом объединения=" & i
End Sub
Окончание цикла взял первое, что пришло в голову.

Добавлено через 6 минут
Проверил на вашем файле Пример
0
pashulka
2402 / 1224 / 499
Регистрация: 01.12.2010
Сообщений: 2,477
23.05.2018, 21:23 13
Vikarach, Вы бы показали как осуществили сам подсчёт, может есть вариант ещё проще

А если серьёзно, то ещё один вариант, правда также с циклом

Visual Basic
1
2
3
4
5
6
7
8
Private Sub Test()
    On Error Resume Next
    Dim n&, r As Range, c As New Collection
    For Each r In Worksheets(1).AutoFilter.Range.Columns(1).SpecialCells(xlVisible)
        c.Add "", r.MergeArea.Address
    Next
    n = c.Count - 1: MsgBox n
End Sub
0
23.05.2018, 21:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2018, 21:23

Как сделать перебор отфильтрованных выделенных ячеек в Excel?
Добрый день. Подскажите код перебора ячеек которые были выделены на листе НО...

Excel: Разъединение объединенных ячеек
Здравствуйте! Ячейки c &quot;A1&quot; по &quot;A10&quot; объединены в одну. Есть ли способ...

Макрос подсчета объединенных ячеек
Здравствуйте! Подскажите пожалуйста. Нужно написать конструкцию, чтобы она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru