2016-02-01 2 views
0

Я не я использую следующий код if для фильтрации col A и col B значения в F1Excel VBA цикл до

После сортировку я скопировать отфильтрованное значение в col A и вставьте их под значением диапазона.

Затем я перехожу к следующему диапазону и повторяю фильтр с использованием другого значения диапазона (в данном случае ячейки G1).

Мне нужно повторить это от ячейки F1 до ячейки AH1.

Могу ли я использовать петлю для этого?

If Range("F1").Value <> "" Then 

    Selection.AutoFilter 
    ActiveSheet.Range("$A$2:$B" & LastRow).AutoFilter Field:=2, Criteria1:=Range("F1").Value 

    Columns("A:A").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Range("F2").Select 
    ActiveSheet.Paste 
    Application.CutCopyMode = False 
    Selection.AutoFilter 
    Range("A1").Select 

End If 

If Range("G1").Value <> "" Then 

    Selection.AutoFilter 
    ActiveSheet.Range("$A$2:$B" & LastRow).AutoFilter Field:=2, Criteria1:=Range("G1").Value 

    Columns("A:A").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Range("G2").Select 
    ActiveSheet.Paste 
    Application.CutCopyMode = False 
    Selection.AutoFilter 
    Range("A1").Select 

End If 

ответ

2

Пробуйте петлю ниже. Я отредактировал ваш код, чтобы не использовать ActiveSheet и Select заявления. Вместо этого я квалифицирую все объекты и методы на их родительский объект и напрямую работаю с объектом. Это позволит избежать многих ошибок и ошибок в ожидаемых и фактических результатах кода.

Dim LastRow As Long 
'assume LastRow already set 

Dim ws As Worksheet 
Set ws = Worksheets("Sheet1") 'change as needed 

With ws 

    Dim cel As Range 
    For Each cel In .Range("F1:AH1") 
     If Len(cel) > 0 Then 
      ws.UsedRange.AutoFilter 
      .Range("A2:B" & LastRow).AutoFilter Field:=2, Criteria1:=cel.Value 
      .Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible).Copy Destination:=cel.Offset(1) 
     End If 
    Next 

End With 

См How to Avoid Select

+1

совершенны, спасибо – SMORF

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