【发布时间】:2017-08-21 07:03:39
【问题描述】:
以下代码应用过滤器并在将某些过滤器应用于表格后选择 B 列中的前 10 项。我一直在将它用于许多不同的过滤选择,但我的一个过滤器组合遇到了问题。
我发现,当过滤后 B 列中只有一项时,它不会复制那个单元格 - 而是复制整行,似乎是一个奇怪的选择。
当我手动向此过滤器添加一个项目(总共 2 个)时,它会很好地复制它。关于为什么只有一个项目时此代码不起作用的任何想法?
Sub top10()
Dim r As Range, rC As Range
Dim j As Long
'Drinks top 10
Worksheets("OLD_Master").Columns("A:H").Select
Selection.sort Key1:=Range("H1"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Worksheets("OLD_Master").Range("A:H").AutoFilter Field:=4, Criteria1:=Array( _
"CMI*"), Operator:= _
xlFilterValues
Worksheets("OLD_Master").Range("A:H").AutoFilter Field:=5, Criteria1:="Drinks"
Set r = Nothing
Set rC = Nothing
j = 0
Set r = Range("B2", Range("B" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)
For Each rC In r
j = j + 1
If j = 10 Or j = r.Count Then Exit For
Next rC
Range(r(1), rC).SpecialCells(xlCellTypeVisible).Copy
Worksheets("For Slides").Range("P29").PasteSpecial
Worksheets("OLD_Master").ShowAllData
End Sub
【问题讨论】:
-
如果你只对一个单元格应用
Specialcells,它实际上会应用到工作表的整个使用范围。您应该在使用前测试计数。
标签: vba excel filter filtering