VBA仅选择第一个可见行

时间:2018-02-02 23:10:37

标签: vba excel-vba excel

我知道使用Select很糟糕。

在自动过滤后返回多个结果时,我正在尝试仅从第一行中选择单元格。我已经使用xlCellTypeVisible来复制所有可见行,但我不确定如何在第一个过滤行的C和D列中创建此选择单元格。我将在activecellOffset行之前从第二个自动过滤器获取值。

For i = 2 To k
    Sheets("Database").Select
    ActiveSheet.Range("$A$1:$C" & k).AutoFilter Field:=2, Criteria1:= _
        Worksheets("SoPhiH").Range("A" & i).Value, Operator:=xlAnd
    Sheets("Database").Select
    ActiveSheet.Range("$A$1:$R" & k).AutoFilter Field:=5, Criteria1:= _
        Worksheets("SoPhiH").Range("C" & i).Value, Operator:=xlAnd
    Sheets("Database").Select
    If Application.WorksheetFunction.Subtotal(3, Range("A2:A" & k)) Then ' If the cell is blank copy and paste, else do nothing
    Else
    ActiveSheet.Range("$A$1:$C" & k).AutoFilter Field:=2
    ActiveSheet.Range("$A$1:$C" & k).AutoFilter Field:=5

    Sheets("SoPhiH").Select
    ActiveSheet.Range("A" & i).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Database").Select
    Range("B" & Rows.Count).End(xlUp).Offset(1).Select
    ActiveSheet.Paste
    UWI = ActiveCell.Value
    ActiveSheet.Range("$A$1:$C" & k).AutoFilter Field:=2, Criteria1:= _
        UWI, Operator:=xlAnd

    ActiveCell.Offset(0, 3) = Worksheets("SoPhiH").Range("C" & i)
    ActiveCell.Offset(0, 17) = Worksheets("SoPhiH").Range("B" & i)
    End If

    Next i

1 个答案:

答案 0 :(得分:1)

许多用于操纵传统范围的相同方法可用于特殊单元创建的范围。

with ActiveSheet.Range("$A$1:$C" & k)
    .AutoFilter Field:=2, Criteria1:=UWI
    with .offset(1, 0)
        .specialcells(xlcelltypevisible).offset(0, 2).resize(1, 2).select
    end with
end with

如果您处理的不仅仅是第一行,则必须使用Areas属性。