• ベストアンサー

Excelマクロにてシートの削除を行いたいです。

初めて投稿させて頂きます。 質問内容  Excelのマクロを使用して指定シート以外のシートの削除を行いたいです。 前条件  外部CSVファイルを取込み、データによってシートを追加して振り分けています。  再度マクロを実行した場合特定のシートを残し(フォーマット等)、他のシートを削除してからデータの振り分けを実施する予定です。 やってみた事  下記の様に書いて実施してみたのですがエラーとなってしまいます。 Sub Clear()   Application.DisplayAlerts = False   For I = 1 To Worksheets.Count     If (Worksheets(I).Name <> "sheet") Then       Sheets(Worksheets(I).Name).Select       ActiveWindow.SelectedSheets.Delete     End If   Next I   Application.DisplayAlerts = True End Sub 上記の書き方だと1シート毎削除なので、選択したシートを一括で削除出来るとうれしいです。 どなたかご存知の方お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.3

こんにちは No.2の回答で目的は達せられると思います。 なぜ元々の FOR~NEXT文でうまくいかないか? それは、deleteを発行した時点でどんどんシート数が減っていくのにNEXT文がきた段階でiがインクリメントされてWorksheets(i).Name が範囲を超えてしまう(シート数を越える)からだと思います。 ループ文で処理するなら数を減らす処理と同じイメージでループを回すべきでした。 一例です。Sub Clear()   Dim i As Long   Application.DisplayAlerts = False   Sheets(Worksheets("Sheet").Name).Activate   Let i = Worksheets.Count   While Worksheets.Count <> 1     If (Worksheets(i).Name <> "Sheet") Then       Sheets(Worksheets(i).Name).Select       ActiveWindow.SelectedSheets.Delete     End If     Let i = i - 1   Wend   Application.DisplayAlerts = True End Sub

WDY
質問者

お礼

書き込みありがとうございます。 ループをして For I = 1 To Worksheets.Count を実行された時点でWorksheets.Countが再度実行される物だと思い込んでいました。 詳しく書いて頂いてありがとうございます。

その他の回答 (2)

noname#123709
noname#123709
回答No.2

削除したくないシート名を間違うと大変なことになりますが、 以下のような感じではダメでしょうか? Sub Clear() Dim WS As Worksheet Application.ScreenUpdating = False Application.DisplayAlerts = False For Each WS In Worksheets If WS.Name <> "sheet" Then WS.Delete Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

WDY
質問者

お礼

書き込みありがとうございます。 さっそく実施してみた所うまくいきました。 お手数をお掛けして申し訳ございません。 ありがとうございます(^∀^)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>選択したシートを一括で削除出来るとうれしいです。 Ctrlキーを押しながらシートタブを左クリックして作業グループとし、 右クリックで”削除”を選べばOKです。 と言う事ではないのですか? 結局該当するシートか否かをループで判断していく手間は、同じだと思いますけど。。。

WDY
質問者

補足

書き込みありがとうございます。 >Ctrlキーを押しながらシートタブを左クリックして作業グループとし、 >右クリックで”削除”を選べばOKです。 上記方法でもいいのですが追加されるシートの数が沢山ある為、一つ一つ選択するのはかなり大変です。 もし間違えて消しては駄目なシートを消してしまうと外部CSVファイルを取込んでも何のデータだか分からなくなってしまうので、マクロにて一括で処理したいです。 申し訳ございません。