簡體   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