Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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, 03:36   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Адрес: Россия, Урал
Сообщений: 6,823
Репутация: 1220

skype: ExcelVBA.ru
По умолчанию

Код:

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 в 03:43.
EducatedFool вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как понять код 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


21:09.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru