【发布时间】:2018-07-02 08:05:03
【问题描述】:
编码和 VBA 的新手,这是我第一次尝试选择和复制 第 10 行可见数据以及表格 Header 在一个表格中我已经使用 VBA 宏进行了过滤。我在stackoverflow上的这个链接中使用了代码示例。 VBA selecting visible cells after filtering。这个特定的示例使我能够学习如何复制单个列中的值。我想复制整行或某些列的值,具体取决于哪个更容易。
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
【问题讨论】:
-
嗨。未经测试,但你想要这样的东西:
Range(r, r.End(xlDown).End(xlToRight)).SpecialCells(xlCellTypeVisible).Copy。这会将所有可见单元格从 r (如果我正确阅读您的代码是表格的左上行)复制到表格的右下角(2 .Ends 找到此位置)。一个好的提示是使用macro recorder。您可以使用它来将手动操作转换为 VBA。非常方便。 -
我最初使用的是宏记录器,但它定义了确切的数据,例如 A1:X345,而不是可见数据的前 10 行。谢谢。
标签: vba excel filtering extract