次のコードは、フィルタを適用し、一部のフィルタがテーブルに適用された後で列Bの上位10個の項目を選択します。私はこれをさまざまなフィルタリングされた選択に使用してきましたが、私は自分のフィルタの組み合わせの1つに問題を見つけました。フィルタリング後に可視セルを選択するVBA
フィルタリング後にB列に項目が1つしかない場合、その1つのセルはコピーされず、行全体がコピーされ、奇妙な選択と思われます。
このフィルタに1つ以上のアイテムを手動で追加すると(合計2)、それが正常にコピーされます。アイテムが1つしかないときにこのコードが機能しない理由についてのアイデアはありますか?
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
あなたは 'PasteSpecial'を使用しますが、どこでどのコピーを実際行うのですか......
を次のようにして適応しますか? – Wolfie
'Specialcells'を1つのセルにだけ適用すると、実際にシートの使用範囲全体に適用されます。カウントを使用する前にテストする必要があります。 – Rory
@Wolfieそれについて申し訳ありません - 私はコピーの代わりに "選択"でテストしていました。私は今それを変更しました – wra