2015-10-26 6 views
-3

Я хочу отфильтровать конкретный столбец в листе Excel и затем выбрать его диапазон до последней используемой строки.Фильтрация столбца и выбор последней используемой строки

Для получения конкретного столбца Я использую

ActiveSheet.Range("$A$1:$D30").AutoFilter Field:=3 , Criteria1:= "1" 

И для нахождения последней строки я использую

Cells(ActiveSheet.Rows.Count,1).End(xlUp).Row 

Я не в состоянии объединить оба вместе. Если я запускаю обе команды вместе, я получаю все результаты вместо результатов фильтрации.

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

Мое требование состоит в том, чтобы первый столбец был отфильтрован, а затем диапазон до тех пор, пока не будет выбрана последняя неиспользуемая строка. Чтобы я мог выполнять некоторые команды с помощью выделения.

ответ

0

Используйте метод SpecialCells с аргументом xlCellTypeVisible. Я также квалифицировал лист для работы, так как это путь более стабильной, чем при использовании ActiveSheet (. Всегда следует избегать, если абсолютно необходимо)

Dim ws as Worksheet 
Set ws = Sheets("mySheet") 'change to the sheet name you need 

Dim lRow as Long 
lRow = ws.Cells(ws.Rows.Count,1).End(xlUp).Row 
ws.Range("$A$1:$D" & lRow).AutoFilter Field:=3 , Criteria1:= "1" 

Dim rRng as Range, cel as Range 
Set rRng = ws.Range("A2:A" & lRow).SpecialCells(xlCellTypeVisible) 'assumes header row in column 1 

'Updated code based on your comments. 
For each cel in rRng 
    objRecipients.Add cel 
Next 

ws.AutoFilterMode = False 
+0

ActiveSheet.Range («$ A $ 1: $ D30»). Поле AutoFilter: = 3, Criteria1: = «1». В этой команде A1-d30 - это диапазон, который я дал для проверки вручную. Я хочу проверить весь лист. Это то, что я задавал – haimen

+0

Я использую следующую команду: для i = 1 для ячеек (ActiveSheet.Rows.Count, 1) .End (xlUp) .Row objRecipients.Add (Range ("B" & i) .Value) Next i Теперь я хочу добавить только для отфильтрованных значений. Это мое требование. Можете ли вы изменить это и помочь мне? – haimen

+0

см. Обновление. Предполагается, что вы все еще хотите использовать столбец D в качестве последнего столбца. Вы можете легко это изменить, а также изменить столбец, в котором используется захват последней строки данных, путем изменения аргумента столбца в 'lRow' –

1

Попробуйте это:

With Range("A1:D" & Range("a1048576").End(xlUp).Row) 
    .AutoFilter Field:=3, Criteria1:="1" 
    .Resize(, 1).Offset(1).SpecialCells(xlCellTypeVisible).Select 
End With 
+0

Я использую следующую команду для i = 1 для ячеек (ActiveSheet.Rows.Count, 1) .End (xlUp) .Row objRecipients.Add (Range («B» & i) .Value) Далее i Теперь я хочу для добавления только для отфильтрованных значений. Это мое требование. Можете ли вы изменить это и помочь мне? – haimen

Смежные вопросы