- ベストアンサー
マクロの動作するタイミング
- VBAによるマクロを利用して、Excelシートでのオートフィルターの適用タイミングについて質問です。
- Excelシートにおいて、セルをダブルクリックすることでオートフィルターを適用し、列をコピーするマクロを作成しましたが、選択したsheet名がB1で表示されるようにする方法について知りたいです。
- Excel2003のWinXP環境での操作です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これでどうですか。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$B$1" Then Exit Sub Application.EnableEvents = False Sheets(Target.Value).Columns("A").Copy Range("A1").PasteSpecial Paste:=xlPasteAll Selection.AutoFilter Field:=1, Criteria1:="<>" Columns("A:A").Select Selection.Copy Application.EnableEvents = True End Sub ・・・ 注 Application.EnableEvents = False Application.EnableEvents = True 上のコードを使ったら、必ず、下のコードで Trueにしないといけません。 そうしないと、イベントが発生しなくなります。 なぜ、Application.EnableEvents = Falseを使うかというと、コピーペーストや値の代入で、イベントが発生して、自分自身を呼び出そうとするからです。
その他の回答 (1)
- ki-aaa
- ベストアンサー率49% (105/213)
補足、読ませてもらいました。 Target.Valueには、セル Range("$B$1")の値が入ります。(If Target.Address <> "$B$1" Then Exit Subのコードが有るので) 質問文に、"sheet1のB1でsheet名の一覧をドロップダウンから選択できるようにし、"と有りましたので、B1が"シート2"と成っていたら >Sheets(Target.Value).Columns("A").Copyは Sheets("シート2").Columns("A:A").Copyと同じ意味になります。 つまり、セルの"B1"で指定したシートのA列をsheet1のA列に貼り付けています。 でわでわ
補足
有難うございます。 上記の通り貼り付けましたが、上手く行きませんでした。 ------------------------------------------ Sheets(Target.Value).Columns("A").Copy Range("A1").PasteSpecial Paste:=xlPasteAll ------------------------------------------ この2行を除いて実行したら上手く行きました。 この2行はどういう意味か分かりませんが…。 勉強不足ですみません。