• ベストアンサー

VBAでのシートの削除について

あるシート("コントロール")の前に存在するシートを全て削除しようと思います。どう記述すれば良いでしょうか? あるシート("コントロール")の前にシートを追加するときは、 Worksheets.Add BEFORE:=Sheets("コントロール") でいけたので、 Worksheets.Delete BEFORE:=Sheets("コントロール") でいけるだろうと思ったら、無理でした。 教えてください。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

あまり、そのようなコードを考えたことはないけれども、こんな風にすればできるかな? 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/17068)
回答No.2

下記実験をしてみてください。 私の場合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が少なくなるのでうまくいきませんので注意。

関連するQ&A

  • excel  vba  シートの取り扱い

    Sub   aaa() Worksheets.Add ActiveSheet.Name = "Namefile" ((質問)ここへ適当なコードを追加することによって 以下のThisWorkbook.Sheets(1)というのを、上で追加した Namefileシートを処理することとしたい。 つまり  Namefileシート=ThisWorkbook.Sheets(1) どうすればいいか。よろしくお願いします。) ThisWorkbook.Sheets(1).UsedRange ThisWorkbook.Sheets(1).UsedRange.Delete ThisWorkbook.Sheets(1).Range("B2") = "ファイル名" ThisWorkbook.Sheets(1).Range("C2") = "最終更新日" End Sub

  • VBA シート名重複した場合削除する

    教えてください。 VBAに関しての質問です。 全くの知識がないので教えていただきたいです。 エクセルワークシートに以下の機能を追加している状態です。 For Each ws In Worksheets If ws.Name = "データ" Then wsChkflg = True End If Next If wsChkflg = True Then ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" Else ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" End If Set wsNew = ThisWorkbook.Worksheets("データ") 「データ」というシートが作成、追加されるのですが、同じシート名で新規作成した時に エラーが出てしまいます。そのエラーを出さないようにすため、ダイアログ等も出さずに既存のシートを強制的に削除する機能を追加したいのです。 VBAの知識がなくて困っています。 何か良い方法がわかる方いらっしゃいましたらお力を貸してください。 よろしくお願いいたします。

  • EXCEL VBAでシートを削除したい

    こんにちは。EXCEL VBAのことで質問させていただきます。 マクロでシートを削除しようと思い、 下記のように記述しました。 Sheets(1).Select ActiveWindow.SelectedSheets.Delete しかし、このように記述すると「選択したシートを削除します。~」のようなメッセージが出てきてしまうため、何度もOKボタンを押さなければなりません。これではマクロで自動実行した意味がなくなってしまいます。 このメッセージを回避する方法はないでしょうか。 宜しくお願い致します。

  • シートにデータがなければ削除するVBA

    こんばんは、VBAについて質問させてください(^O^) あるブックに32個のシートが入っています。 32個のシートのうち、セルA2にデータの入っているシートとそうでない シートがあります。(毎回変動します。) これを踏まえて、セルA2にデータが入っていればそのまま、 入っていなければそのシートを削除。 という作業をVBAでやろうと思って以下の通りVBAを記述したのですが、 シートが削除されるとシートの数が変わってしまうので、これではだめだと 思ったのですが、どのように記述すればいいのか分かりません(T_T) どなたかご教授いただけないでしょうか、よろしくお願いいたします。 Sub Macro1() Application.DisplayAlerts = False Dim i As Integer For i = 1 To 32 Sheets(i).Select If Range("A2").Value = "" Then Sheets(i).Delete End If Next i End Sub

  • VBAで指定したSheetの削除

    お世話になります 指定したシート以外すべてのシートを削除させるボタンを作成したいのですが ↓こんなものを見つけました。(URLわからくなってしまった;;) これは図1~ワークシートを削除させるVBAらしいのですが ■解らないこと なぜかsheetにすると削除してくれません。 '指定以外ワークシート削除 Private Sub CommandButton1_Click() Dim myShe As Worksheet For Each myShe In Worksheets If myShe.Name <> Worksheets("図").Name Then myShe.Visible = Delete End If Next End Sub

  • エクセルVBA シート上にあるコマンドボタンを削除するには?

    VBA初心者のためよろしくお願いします。 タイトル通り、シート上にあるコマンドボタンを削除したいです。 visible,enabledなどは使用せず、コントロールごと削除したいと考えています。 私は Worksheets("sheet1").CommandButton1.Delete だけで削除できると思っていたのですが、実行してみると  プロシージャの呼び出し、または引数が不正です というエラーが出てきてしまいます。 検索はしてみたのですが、中々発見できずに苦労しています。 わかる方がいましたら、よろしくお願いします。

  • 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シート毎削除なので、選択したシートを一括で削除出来るとうれしいです。 どなたかご存知の方お願いします。

  • VBAで新しいシートに任意の名前をつける方法

    Worksheets.Addでシートを追加しますが、 このシートの名前を任意につけることはできますか?

  • Access VBAからExcelシートの削除

    お世話になります。 Access VBA から指定したExcelシートの削除を行うプログラムを下記の通りに記載しています。 Set oApp = CreateObject("Excel.Application") oApp.Workbooks.Open FileName:="エクセル.xls" oApp.DisplayAlerts = False oApp.Sheets("シート名1").Delete oApp.DisplayAlerts = True この場合において、"シート名1"が存在していれば問題なく処理されますが、 このシートが存在していなければエラーが起きます。 指定したExcelブックにこのシートが存在するかどうかのチェックを事前に行い、 存在する場合のみ削除処理を行うにはどうすればよいでしょうか? よろしくお願いします。 環境は、Access2007です。

  • VBA シートの名前が重複するときに すでにある方を削除する

    VBA シートの名前が重複するときに すでにある方を削除する よろしくお願いします。 エクセル2003を使っています。 「入力シート 」をコピーして「DB」という名前をつける。 すでに「DB]シートがあれば「DB」シートを削除する。 その時に、もし「集計」シートと「名簿」シートがあれば一緒に削除する というコードを考えています。 集計シートや名簿シートはない場合もありますので、最初からdeleteにするとエラーになります。 どうぞお知恵をお貸しください。 sub シートの挿入と削除 () Worksheets("入力シート").Activate ActiveSheet.Copy After:=ActiveSheet On Error Resume Next 'エラーが発生しても続行 ActiveSheet.Name = "DB" If Err.Number = 1004 Then Application.DisplayAlerts = False '警告メッセージを表示しない Sheets("DB").Delete Application.DisplayAlerts = True ActiveSheet.Name = "DB" End Sub End If

専門家に質問してみよう