繁体   English   中英

Excel VBA循环直到

[英]Excel VBA loop until

我使用以下if代码通过F1的值过滤col Acol B

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

尝试下面的循环。 我已经将您的代码重构为不使用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

请参阅如何避免选择

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM