Страницы: 1
RSS
Как в макросе скопировать отфильтрованные значения?
 
Добрый вечер. Подскажите, как в макросе скопировать отфильтрованный диапазон из одного файла?
.Range("A1").AutoFilter Field:=1, Criteria1:="=я", Operator:=xlOr, Criteria2:="=ты"
Здесь я применил автофильтр и выбрал два значения, необходимо скопировать только отфильтрованный диапазон.
.Range("A1").AutoFilter.Copy Destination:=BazaSht.Cells(iLastRowBaza, 1) Вот так ошибку выдает.
Помогите пожалуйста.
 
Сперва присваиваем переменной Rng диапазон отфильтрованных ячеек

Код
 Dim Rng As Range
With .AutoFilter.Range
       Set Rng = .SpecialCells(xlCellTypeVisible) 'с шапкой таблицы
       'Set Rng = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'без шапки таблицы
End With


а дальше копируем диапазон куда надо

Код
Rng.Copy Destination:=BazaSht.Cells(iLastRowBaza, 1) 'копируем диапазон куда надо


P.S. И не забываем сделать проверку на наличие видимых данных, а то фильтр поставите - данных, например, нет, а вы их будете пытаться скопировать

Код
   If Worksheets("Лист1").AutoFilter.Range.Columns(1).SpecialCells(xlVisible).Count = 1 Then 'если нет отфильтрованных строк, кроме шапки таблице, то
            MsgBox "Данных, отвечающим заданным критериям в таблице нет!", vbExclamation, "Ошибка"
            .ShowAllData 'снимаем установленный фильтр
            Exit Sub
        End If
Изменено: New - 31.03.2013 21:11:37
 
Как правило, ниже таблицы с фильтром пустые строки, так что достаточно офсета - будет скопирована одна пустая строка
Код
.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Copy Destination:=BazaSht.Cells(iLastRowBaza, 1)
 
Сделал как написано, ошибку выдает. описал переменную rng в начале как dim rng as long, может здесь ошибка?
 
rng - так обычно называют переменную диапазона )) Следовательно - as range
Страницы: 1
Читают тему
Наверх