- ベストアンサー
Excelマクロ シート名一覧からシート削除
Excelマクロで質問させてください。 任意のシートに記載されたシート名一覧を参照して、そこに記載されているシート名のシートを、ブック内から削除するマクロは作れますでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>作れますでしょうか 作れます。ただし、エクセルVBAといわないで、マクロと言っているレベルの人には、推測ですが、経験不足で、できない(思いつかない)でしょう。すると丸投げしかない。 仕方なくコードの1例を書いておきましょう。 「コレクション」という考えと「For each」というものを使える点は、VBAを勉強しないと分らないと思う。 ーーー Sheet1のA列のA1:A3に 削除シート名 Sheet2 aaa (シート名の記述セル順序は問いません。CountIf関数利用のメリット) とあるとします。 削除するシート名です。削除シート名のあるSheet1に当たるものはこの削除リストにないものとします。 標準モジュールに Sub test01() Application.DisplayAlerts = False For Each sh In ActiveWorkbook.Sheets MsgBox sh.Name sn = sh.Name x = WorksheetFunction.CountIf(Worksheets("Sheet1").Range("a2:a10"), sn) MsgBox x If x > 0 Then sh.Delete End If Next Application.DisplayAlerts = True End Sub '非表示シートも出る。 と入れて実行します。 ただし(a2:a10")部分など修正が必要なことに気づかない人は、VBAでやるレベルではない。 少数例でやってみて、納得したら上記のコードのMsgBoxの行は削除してください。
その他の回答 (1)
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは Sub test() Dim tSh As Worksheet Dim r As Range Dim t As Range '任意のシートをアクティブにして実行 Set t = Range("A1:A2") 'シート名一覧 Application.DisplayAlerts = False On Error Resume Next For Each r In t If r <> ActiveSheet.Name Then Set tSh = Nothing Set tSh = Worksheets(r.Value) If Not tSh Is Nothing Then tSh.Delete End If End If Next On Error GoTo 0 Application.DisplayAlerts = True End Sub こんな感じでしょうか?
お礼
ご回答ありがとうございました。 オブジェクトを格納するオブジェクト変数にはSetを用いるという所までは理解できました。 その後の部分の「もしリスト名とアクティブシート名が違うなら」以降で躓きました。 例えば、本質問と逆の「リスト名以外のシート名を削除する」を試そうとしてわからなくなってしまいました。
お礼
ご回答ありがとうございました。 「コレクション」「For each」等、学ばせていただきました。 削除するシートが多ければ、参照範囲のA2~A10の部分を変更すれば良いと理解しました。