- ベストアンサー
【Excel2002】表示シートのみを選択するマクロ
複数シートがあります。(表示シート・非表示シート共に存在します) 表示シートのみを選択するにはどのようなマクロを組めばよいか教えてください。ネットでいくつか検索しましたがコレという物がヒットせず、ピンときません。初心者ですがよろしくお願いいたします。 【社内でデータを編集した後、表示シートのみを別ブック(新しいブック)にコピーして、お客様配布用データにするマクロを作りたいと思っています。】
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
表示シートとはアクティブということじゃなくVisible=Falseじゃないってことですよね? ならば Sub test01() For Each st In Worksheets If st.Visible Then st.Select (False) Next ActiveWindow.SelectedSheets.Copy Application.Dialogs(xlDialogSaveAs).Show End Sub では?
その他の回答 (3)
- zap35
- ベストアンサー率44% (1383/3079)
こういうことですか? 元のシートの構成が Sheet1 表示 Sheet2 非表示 Sheet3 表示 のときに、マクロを実行後Sheet1とSheet3だけの新しいブックを作成する もしそうであれば、こんなマクロでもできそうです Sub Macro1() Dim wb As Workbook Dim ws As Worksheet If Each ws In ThisWorkbook.Worksheets If ws.Visible = xlSheetVisible Then If wb Is Nothing Then ws.Copy Set wb = ActiveWorkbook Else ws.Copy After:=wb.Worksheets(wb.Worksheets.Count) End If End If Next ws End Sub
お礼
回答いただいたマクロを実際に試してみました。 ANo.2のKenKen_SP様やANo.3のmerlionXX様のものと比較して、 動作(処理)が遅いように思います。それぞれのシートについて If分岐処理をしているからでしょうか? (初心者の勝手な推測で、見当違いでしたら申し訳ありません) ただ、zap35様の内容でマクロを組んだ方が良いケースも今後出てくる かと思います。勉強になりました。 回答ありがとうございました。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 シートの表示・非表示ということならこんな感じ。 > 表示シートのみを選択するには Dim sh As Object For Each sh In ActiveWorkbook.Sheets If sh.Visible = xlSheetVisible Then sh.Select False End If Next > 表示シートのみを別ブック(新しいブック)にコピー ' 現在選択中のシート(作業グループ)を新規ブックにコピー ActiveWindow.SelectedSheets.Copy
お礼
For Each~ を使って、うまく動作する事ができました! まだまだ初心者ですが、コツコツ勉強していきます。 ありがとうございました。
- shut0325
- ベストアンサー率40% (490/1207)
表示シート=アクティブなシートということですよね?? 今、画面に表示されているシートがアクティブ(選択された)なシートです。 なので特に選択するコマンドは必要ありません。そのままコピーするだけです。 ActiveSheet.Copy
お礼
回答ありがとうございます。 ですが、今回の質問はアクティブシートではなく表示シートですので、 こちらの意図とは異なります。せっかく回答いただいたのに申し訳ありません。
お礼
表示シートの選択について、For Each~ を使えばOKですね!さらには「ファイル名を付けて保存」ダイアログボックスを表示させるところまで回答いただき、こちらの希望通りの動作でした。 なにぶん初心者で、フロー制御の使い方で迷う時があるので、コツコツ勉強しようと思います。 ありがとうございました。