Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2015, 20:02   #1
SkyWay
 
Регистрация: 30.08.2013
Сообщений: 8
По умолчанию Как понять данный код?

With ThisWorkbook.Worksheets(1)
If .AutoFilterMode = True And .FilterMode = True Then
With .AutoFilter.Range.Columns(1)
Set iFilterRange = _
.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlVisible)
For Each iCell In iFilterRange
Z = Z + 1
Next
End With

End If
End With


Перемененная Z считает количество строк на листе с применённым фильтром, работает, как надо. Вот только я его не понимаю =(
Кому не сложно, можете разжевать что в каждом моменте это когда происходит?
SkyWay вне форума Ответить с цитированием
Старый 12.02.2015, 02:36   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub test1()
    With ThisWorkbook.Worksheets(1)        ' всё ниженаписанное применяется к листу №1 текущего файла

        If .AutoFilterMode = True And .FilterMode = True Then        ' если включен автофиьтр, то

            With .AutoFilter.Range.Columns(1)        ' берем первый столбец отфильтрованных данных

                ' получаем диапазон, начиная со ВТОРОЙ ячейки - .Offset(1) отфильтрованного столбца
                ' (чтобы исключить ячейку заголовка таблицы)
                ' и из диапазона берем только видимые ячейки - .SpecialCells(xlVisible)
                Set iFilterRange = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlVisible)

                ' перебираем все ячейки полученного диапазона в цикле
                ' (видимые ячейки первого отфильтрованного столбца, под строкой заголовка)
                ' и тупо считаем их количество, для каждой ячейки увеличивая значение Z на единицу
                For Each iCell In iFilterRange
                    Z = Z + 1
                Next
            End With
        End If
    End With
End Sub
можно сделать более простой вариант кода:
(конечно, он не во всех случаях будет работать)
Код:
Sub test2()
    Z = ActiveSheet.UsedRange.Columns(1).SpecialCells(xlVisible).Count - 1
    MsgBox Z

    '    ActiveSheet  - с активного листа
    '    UsedRange - из заполненной его области ячеек
    '    Columns(1) - из первого столбца вышеуказанного
    '    SpecialCells(xlVisible) - берем только видимые ячейки
    '    Count - получаем их количество
    '     - 1 - вычитаем из количества 1 строку заголовка
End Sub

Последний раз редактировалось EducatedFool; 12.02.2015 в 02:43.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как понять код Lepton Visual C++ 1 13.01.2012 17:56
Как записать в виде функции данный код программы в С++ Muaitai Помощь студентам 0 07.01.2012 01:48
Как записать в виде функции данный код программы в С++ Muaitai Visual C++ 2 06.01.2012 13:42
как правильно разбить данный код на 3 класса? neomax38 Общие вопросы по Java, Java SE, Kotlin 1 25.11.2011 22:17
Почему данный код закрашивает сразу 2 рядом стоящих пикселя а не один как вроде бы должно быть androk Общие вопросы C/C++ 1 10.11.2011 22:20