簡體   English   中英

在VBA過濾表中選擇第10行可見單元格

[英]Selecting 1st 10 Rows of visible Cells in VBA Filtered Table

新編碼和VBA,這是我在試圖選擇和第一10行可見數據的與我所使用VBA宏過濾表中的表一起復制的第一次嘗試。 我在stackoverflow上使用了此鏈接中的代碼示例。 過濾后VBA選擇可見單元格 這個特定的例子讓我學習如何在單個列中復制值。 我想復制整個Row的值,或者根據哪些列更容易復制一些列。

Sub LPRDATA()


Dim TYEAR    As String
TYEAR = Range("TYEAR").Value
Dim QUARTER    As String
QUARTER = Range("QUARTER").Value
Dim r As Range, rC As Range
Dim j As Long


Sheets("CONTROL").Select
Sheets("DATA").Visible = True
Sheets("CONTROL").Select
Sheets("10").Visible = True
Sheets("DATA").Select
    ActiveWorkbook.Worksheets("DATA").ListObjects("tblData").Sort.SortFields.Clear
     ActiveWorkbook.RefreshAll
     Range("tblData[[#Headers],[Sn '#]]").Select

Range("tblData[[#Headers],[Year]]").Select
Selection.AutoFilter
ActiveSheet.ListObjects("tblData").Range.AutoFilter Field:=2, Criteria1:="LPR"
ActiveSheet.ListObjects("tblData").Range.AutoFilter Field:=12, Criteria1:=TYEAR
ActiveSheet.ListObjects("tblData").Range.AutoFilter Field:=15, Criteria1:=QUARTER


ActiveWorkbook.Worksheets("DATA").ListObjects("tblData").Sort.SortFields.Add _
    Key:=Range("tblData[[#All],[Score]]"), SortOn:=xlSortOnValues, Order:= _
    xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("DATA").ListObjects("tblData").Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

Set r = Nothing
Set rC = Nothing
j = 0
Set r = Range("C1", Range("C" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)

For Each rC In r
j = j + 1
If j = 11 Or j = r.Count Then Exit For
Next rC

Range(r(1), rC).SpecialCells(xlCellTypeVisible).Copy
Sheets("10").Select
Range("C7").Select
ActiveSheet.Paste


End Sub

我已經刪除了一些代碼,以便更容易理解這個示例。

' Sorts a table in Excel.
' Then filters table for first 10 records.
' Then copies/pastes.
Sub Example()
    Dim sourceWS As Worksheet       ' Spreadsheet that contains the table.
    Dim sourceLO As ListObject      ' Table that contains the data.
    Dim targetRange As Range        ' Where to copy data to.

    ' Populate vars.
    Set sourceWS = ActiveSheet
    Set sourceLO = sourceWS.ListObjects("tblData")
    Set targetRange = Range("10!C7")

    ' Sort the table.
    With sourceLO.Sort
        .SortFields.Add Range("tblData[[#All], [Score]]"), xlSortOnValues, xlDescending
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    ' Limit to first ten rows (update field to select limiting column).
    sourceLO.Range.AutoFilter Field:=1, Criteria1:="10", Operator:=xlTop10Items

    ' Copy currenlty visible cells.
    sourceLO.Range.SpecialCells(xlCellTypeVisible).Copy
    targetRange.PasteSpecial (xlPasteAll)
End Sub

起始sourceLO.Range.AutoFilter...sourceLO.Range.AutoFilter...表限制為前10個recrods。

行起始sourceLO.Range.SpecialCells...僅復制可見行(即前10行)。 如果要將復制/粘貼限制為某些列,請使用以下語法:

Range("tblData[Header 1], tblData[Header 2]").SpecialCells(xlCellTypeVisible).Copy

您可以考慮使用循環逐行遍歷並查找符合條件的前十行,而不使用過濾器。

除非您需要過濾器以特定方式以可視方式向用戶顯示數據,否則循環可能更靈活,更易於編碼。

你也可以考慮將你的值存儲在變量而不是使用復制粘貼 - 我個人覺得當宏擦除我的剪貼板時有點煩惱:)

我通常使用此頁面來參考vba中的循環語法: http//www.excel-easy.com/vba/loop.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM