- ベストアンサー
VBAでのシートの削除について
あるシート("コントロール")の前に存在するシートを全て削除しようと思います。どう記述すれば良いでしょうか? あるシート("コントロール")の前にシートを追加するときは、 Worksheets.Add BEFORE:=Sheets("コントロール") でいけたので、 Worksheets.Delete BEFORE:=Sheets("コントロール") でいけるだろうと思ったら、無理でした。 教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あまり、そのようなコードを考えたことはないけれども、こんな風にすればできるかな? Sub test() Application.DisplayAlerts = False For i = 1 To Worksheets.Count On Error GoTo Endline Worksheets("コントロール").Previous.Delete Next Endline: Application.DisplayAlerts = True End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17070)
下記実験をしてみてください。 私の場合3つのシートが当初作られるように設定してます。 それにワークシート挿入をして4つにしました。ただし3や4に意味はありません。 (A) Sub test01() For i = 1 To 4 MsgBox Worksheets(i).Name Next i End Sub (B) Sub test02() MsgBox Worksheets("sheet4").Index End Sub (C) Sub test03() d = Worksheets("sheet4").Index For i = 1 To d MsgBox Worksheets(i).Name Next i End Sub (A)を実行すると、左からシート名が表示されることを納得してください。 (B)を実行すると、同じく左からシート名が表示されます。 Sheet4の位置を前後に移動させてやってみてください。 ワークシートというコレクションはINDEXで指定できます。 INDEX順に表示されてます。 であれば(C)でSheet4というシート名のINDEX値をしり、 1からそれまで(または1つ手前まで)を指定すれば、質問のことができることがわかります。 後は、コレクションから減らすときはDELETEなので、DELETEに変えればよい。 Sub test04() Dim sn(30) d = Worksheets("sheet4").Index For i = 1 To d sn(i) = Worksheets(i).Name Next i For i = 1 To d Worksheets(sn(i)).Delete Next i End Sub 前半のNameの部分をDeleteにして(後半をなしにして)実行すると、Deleteのつどdが少なくなるのでうまくいきませんので注意。