Как пропустить первый элемент диапазона в операторе цикла For Each?[EXCEL-VBA] - PullRequest
0 голосов
/ 14 декабря 2018

То, что я хочу сделать, относительно просто.У меня есть набор данных, который я отфильтровал на основе критериев, поэтому скрыл некоторые строки в своем рабочем листе.Я установил диапазон для отфильтрованных данных, который должен проходить только через ячейки, которые видны с примером кода.

With MyDataWorksheet.AutoFilter.Range
     On Error Resume Next
     Set AutoFilterRange = .SpecialCells(xlCellTypeVisible)
     On Error GoTo 0
End With

Теперь я хотел бы просмотреть все мои данные в переменной AutoFilterRange, которая должна была захватить все строкикоторые видныЯ перебираю их, делая что-то вроде этого.

Sub aSub()

Dim DR As Range
For Each DR In AutoFilterRange
    'Do something here
Next DR

End Sub

Я использую это для каждого цикла, чтобы делать вещи с видимыми строками, однако я хотел бы просто пропустить первый элемент в диапазоне данных как эту строку элементаномер содержит мои имена заголовков.Я думал, что что-то вроде этого поможет решить мою проблему, но все, что он делает, это идет к следующему скрытому элементу строки сразу после элемента строки заголовка.

For Each DR In AutoFilterRange.Offset(1,0)
    'Do something here
Next DR

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Примерно так:

With MyDataWorksheet
    If .AutoFilterMode Then
        With .AutoFilter.Range
            Set AutoFilterRange = .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0).SpecialCells(xlCellTypeVisible)
        End With
    End If
End With

В своем коде вы не показываете, что будет с AutoFilterRange, если AutoFilter не включен, поэтому я также пропускаю эту часть.

0 голосов
/ 14 декабря 2018

Вы можете добавить оператор if и флагдругие итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...