Excel VBA循环直到

时间:2016-02-01 12:50:19

标签: excel vba excel-vba loops

我使用以下if代码按col A

中的值过滤col BF1

排序后,我会将过滤后的值复制到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

1 个答案:

答案 0 :(得分:2)

尝试下面的循环。我重构了您的代码,不使用ActiveSheetSelect语句。相反,我将所有对象和方法限定为其父对象,并直接使用该对象。它将避免代码的预期与实际结果中的许多陷阱和错误。

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