- 締切済み
オートフィルター VBAでの設定について
オートフィルターで0以外のものに絞って、 コピーしたいのですが、 値が0しかない場合にすべてのものをコピーするように なってしまうので、 コピーすることがないようにさせたいです。 例) Sub test() Sheets("Sheet1").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$A$10").AutoFilter Field:=1, Criteria1:="<>0" Range("A2:A10").Select Range(Selection, Selection.End(xldown)).Select Selection.Copy End Sub このようなコードの場合にA2:A10の値が0しかなかった場合に コピーしている状態をなくしたいのですが、 どこのコードを変えたらいいでしょうか。 回答よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- chayamati
- ベストアンサー率41% (260/624)
>オートフィルターで0以外のものに絞って、 コピーしたいのですが、 ★添付のようにセルA1に対象セルをSUM()して 貴方のTEST()をコピー()のサブルーチンとして 次のようにしては ---------------------------------- Sub コピー() If Range("A1") <> 0 Then TEST End Sub --------------------------------------------------------- Sub TEST() Sheets("Sheet1").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$A$10").AutoFilter Field:=1, Criteria1:="<>0" Range("A2:A10").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy End Sub ★ただし Selection.AutoFilter で実行時エラーになります
- imogasi
- ベストアンサー率27% (4737/17069)
下記が、見当はずれなら、すみません。 データ例 A1:B10 氏名 点数 あ1 0 あ2 0 あ3 0 あ4 0 あ5 0 あ6 0 あ7 0 あ8 12 あ9 0 として、 0以外のデータをコピーするとして Sub test02() Range("B2").AutoFilter 2, "<>0" Range("A1").CurrentRegion.Copy Range("E1") End Sub を実行すると、 シートの「見た目!」は 氏名 点数 氏名 点数 あ8 12 のようになります。「あ8 12」が見えません。 フィルタの結果も、そのB列が0のため、見えなくします。でも選別は行われています。 これはエクセルのフィルタが、該当「抜出し」ではなく、該当しないもは、「非表示にする」仕組みのため、結果を置く行などが、フィルタの結果、表示しない行だと、見た目で結果が見えません。 こういうことと関連してませんか? >以外のものに絞って は、Range("B2").AutoFilter 2, "<>0" のような書きかたで、質問のことだけなら、よいのでは。 参考WEB記事 https://daitaideit.com/vba-autofilter-copy-delete/
- watabe007
- ベストアンサー率62% (476/760)
参考に With ActiveSheet .Range("$A$2:$A$10").AutoFilter Field:=1, Criteria1:="<>0" If .AutoFilter.Range.Columns(1).SpecialCells(12).Count = 1 Then .AutoFilterMode = False Exit Sub End If .AutoFilter.Range.Copy End With
- kkkkkm
- ベストアンサー率66% (1719/2589)
A2:A10でした If WorksheetFunction.CountIf(Range("$A$2:$A$10"), ">0") Then
- kkkkkm
- ベストアンサー率66% (1719/2589)
たとえば If WorksheetFunction.CountIf(Selection, ">0") Then Selection.Copy 'コピー後の操作 End If '最後に Application.CutCopyMode = False Range("A1").Select で試してみてください。