プロが教えるわが家の防犯対策術!

エクセルVBAで売上帳を作成していますが、オートフィルタでデータ抽出した後、表示されている行のみをコピーして別シートに貼りつけるにはどうすればよいのでしょう?

別シートは指定したセルに値のみの貼り付けをしたいと思っています。

宜しくお願いします。

A 回答 (4件)

こんにちは


マクロの記録で作成した一例です。コメントを読んで、適当にアレンジして下さい。

Option Explicit
Sub SampleMacro1()
'
' SampleMacro1 Macro
' マクロ記録日 : 2009/3/13
'
 'フィルター部分
 Selection.AutoFilter Field:=1, Criteria1:="=ほげほげ", Operator:=xlAnd
 '可視セルの選択
 Selection.SpecialCells(xlCellTypeVisible).Select
 '選択範囲のコピー
 Selection.Copy
 'コピー先のシート&セル選択
 Sheets("Sheet2").Select
 Range("A1").Select
 'ペースト
 ActiveSheet.Paste
 'コピー元シートに戻りコピー状態解除
 Sheets("Sheet1").Select
 Application.CutCopyMode = False
 Range("A1").Select
End Sub

外してたら、ごめんなさい

この回答への補足

Sub 顧客抽出コピペ()
Sheets("売上帳").Select
Range("B6").AutoFilter Field:=2, Criteria1:=Range("F2").Value
Range("B7:B1000").Select
Selection.Copy
Sheets("個別売上帳").Select
Range("B7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets("売上帳").Select
Range("E7:J1000").Select
Selection.Copy
Sheets("個別売上帳").Select
Range("C7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub

という風に作ってみたのですが、2行目の『Range("B6")』
の部分はどういう意味なのでしょうか?
B6でなくてもB7とかB8とかでも同じように動くのですが?

あと、上記のコードは今のところエラーなどは出ていないのですが、
何か問題が出そうな箇所はあるでしょうか?
ちょっと心配なのは、
『Selection.SpecialCells(xlCellTypeVisible).Select』
というコードを使っていないので、いらないところまで含まれて
コピーされることがあるのでしょうか?

補足日時:2009/03/16 10:31
    • good
    • 6

 


先ほどの続きですね。
 
フィルター結果をSheet2のC3から値のみ貼り付ける場合

'------------------------------
Sub 顧客抽出()

 Range("B4").AutoFilter Field:=2, Criteria1:=Range("F2").Value

'Sheet2のC3から貼り付け

 Range("A4").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
 Sheets("Sheet2").Range("C3").PasteSpecial xlValues

'コピーモード解除

 Application.CutCopyMode = False

End Sub
'------------------------------------

ただ先の質問も今回の質問もマクロ記録をとってみればそこに解答が。。(^^;;;
 
    • good
    • 2

シート1のセルA2からA10に「あ」から「お」のデータが入っているとします。

(セルA1は見出し)
フィルターで「あ」を抽出し、表示されている行をシート2のセルA1へ貼り付けます。

With Worksheets("Sheet1")
 With .Range("A1:A10")
  .AutoFilter Field:=1, Criteria1:="あ"
  .Copy Worksheets("Sheet2").Range("A1")
 End With
 .AutoFilterMode = False
End With
    • good
    • 2

こんにちは


#1です。質問者さんの意図するところとは、やはり外していたようです。
 該当範囲を選択した後にマクロ記録で出来たプログラムでした。

>という風に作ってみたのですが、2行目の『Range("B6")』
>の部分はどういう意味なのでしょうか?
>B6でなくてもB7とかB8とかでも同じように動くのですが?
 肝心のシートを見ていないので、完全に想像ですが B6 セルは、項目セルなのではないですか?
 普通、フィルターをかけるときはデータの上ではなく項目セルに掛けますよね。
 従って、B7、B8セルは、データセルだと思いますので、同じように動いているように見えても「対象データが減っている」状態ですから抽出漏れが発生することが考えられます。

>『Selection.SpecialCells(xlCellTypeVisible).Select』
>というコードを使っていないので、いらないところまで含まれて
>コピーされることがあるのでしょうか?
 このコードだけでは、そのようにはなりません。例えば、以下のようにしても B1000 までセレクトされていることが分かると思います。
※Selection.Address に選択されたセルアドレスが入っています。

 Range("B6").AutoFilter Field:=2, Criteria1:=Range("F2").Value
 Range("B7:B1000").Select
 Selection.SpecialCells(xlCellTypeVisible).Select
 MsgBox Selection.Address

 下記のようにするとB6セルに隣接しているデータのあるセル全体を選択するので未使用のセルを選択しません。

Range("B6").CurrentRegion.Select
Selection.AutoFilter Field:=2, Criteria1:=Range("F2").Value
Selection.SpecialCells(xlCellTypeVisible).Select
 MsgBox Selection.Address

 しかし、質問者さんは、部分部分を分けてコピーして合体したいと思ってるようですので、そのままでは使えないですね m(__;m
 外していたようで、ごめんなさい。
    • good
    • 1
この回答へのお礼

みなさん回答ありがとうございました。
ひとまず締め切ります。
またよろしくお願いします。

お礼日時:2009/04/02 11:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A