• ベストアンサー

ワークシートの削除

For SheetSakujo = 3 To SheetCount - 1 Worksheets(SheetSakujo).Select If ActiveSheet.Name <> "★" Then If Range("A2") = "" Then ActiveWindow.SelectedSheets.Delete End If ElseIf ActiveSheet.Name = "★" Then Exit For End If Next VBAでワークシートの削除を行っています。 A2が空白のシートを消そうと思って上記のようなコードをくみましたが、 削除されるとシートが減ってしまうため、次のシートも空白だった場合、消されないで飛ばされてしまいます。 3枚目のシート:空白 4枚目のシート:空白 5枚目のシート:空白     ↓ sheetsakujoが「3」なので3枚目は削除される。 次の4枚目のシートが3枚目が削除されたため、「3番目のシート」になるため、次に削除されるのは5枚目のシート。 この場合、どのようにしたらいいのでしょうか?

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

  • ベストアンサー
  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.1

こんにちは。 5枚目のシートから削除して、 4枚目、3枚目・・・という風にすればいいと思います。  For SheetSakujo = 3 To SheetCount - 1 のところを、  For SheetSakujo = SheetCount - 1 To 3 Step -1 みたいな。

KODAMAR
質問者

お礼

回答ありがとうございます。 いまファイルが壊れてしまって修復中なので試せませんが、 修復したら試してみたいと思います。 ありがとうございました。

その他の回答 (1)

  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.2

Forループのカウントを、3からではなく、逆にSheetCount側から行います。

KODAMAR
質問者

お礼

回答ありがとうございます。 いまファイルが壊れてしまって修復中なので試せませんが、 修復したら試してみたいと思います。 ありがとうございました。

関連するQ&A

  • 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で、作業対象を全ワークシートか選択シートかを切り替えたい

    エクセル2000です。 VBAで、作業対象を全部のワークシートか選択されたシートかを任意で切り替えたいのです。 ためしに無理とは思いながら以下のように作ってみましたが、当然のようにエラーになります。 どうかお知恵をお貸しくださいませ。 お願い致します<(_ _)> Sub test() sc = ThisWorkbook.Worksheets.Count ssc = ActiveWindow.SelectedSheets.Count If sc <> ssc Then ans2 = MsgBox(ssc & " 枚のシートだけでいいんですね?" _ & vbCr & "" _ & vbCr & "もし全部のシート(" & sc & "枚)を対象にするなら" _ & vbCr & "いいえを選択してください。", vbYesNo + vbQuestion, " o(^-^)o") ts = IIf(ans = vbNo, Worksheets, ActiveWindow.SelectedSheets)'ここでエラー End If For Each sh In ts sh.Activate sh.Cells(1, 1).Value = sh.Name Next sh End Sub

  • 【Excel VBA】ワークシートの表示(続き)

    すみません。 追記が出来なかったため、コードの続きをこちらに記載します。 For i = 1 To 12 If actsht = tmp(i) Then Flag = 1 Anser = MsgBox("翌月分シートを作成しますか?", vbYesNo + vbDefaultButton1, "確認") If Anser = vbYes Then ActiveSheet.Copy After:=ActiveSheet ActiveSheet.Name = tmp(i + 1) Sheets(actsht).Tab.ColorIndex = 2 Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value ActiveSheet.Range("A2").Select Exit For ElseIf Anser = vbNo Then Exit For End If End If Next If Flag = O Then MsgBox ("新しいワークシートを作成出来ません。") End If If actsht = tmp(i) Then If Sheets(元データ).Visible = False Then Sheets(元データ).Visible = True End If End If 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

  • 複数シート削除の追加編集がよくわかりません

    下記コード動作するんですが1回1回クリックして削除しないといけないので、1回で完了したいんですが、追加編集がよくわかりません。 以上 よろしくお願い致します。 ------------ Sub シート2以降を削除() For i = 2 To Worksheets.Count Worksheets(i).Select ActiveWindow.SelectedSheets.Delete Next i End Sub ------------

  • EXCELのVBAにてシート削除の確認を表示させない

    EXCELにてVBAよりシート削除をコーディングしているのですが、 シート削除の確認を表示させない方法は、ありませんか? 例) For Each W_SHEET In Worksheets if W_SHHET.NAME <> "master" Then W_SHEET.DELETE End If Next

  • エクセルVBAでワークシート削除

    ブックの中にある、表示されているシートで、たとえば図表1~図表4(何番まであるかは不定です)という名前のシートを削除するVBAを作りました。ただの「図表」という名前のシートや、「何々図表」、「図表集計」等のシートは削除しません。 Sub 保存図表削除() Dim SN As String For Each sh In Worksheets SN = sh.Name If sh.Visible And IsNumeric(Mid(SN, 3, Len(SN) - 2)) And Left(SN, 2) = "図表" Then ans = MsgBox(SN & "を削除してよい?", vbYesNo) If ans = vbYes Then Application.DisplayAlerts = False sh.Delete Application.DisplayAlerts = True End If End If Next End Sub これでうまく作動するのですが、いちいちシートごとに削除の有無を聞かずに、削除するシート名をまとめて表示し、それらを削除するかしないかを聞くにはどうすればよいでしょうか? 「図表1,2,3,4があります。これらを削除しますか?」というような感じです。

  • シート名でなくindex番号でシートの移動をしたい

    windows7 Excel2007でマクロ作成の初心者です。以下の点で困ってます。ご指導お願いします。 シートの次ページへ、およびページの前に戻るというコードをつくりましたが、文字列でなく、indexを使ってつくりたのでですが、思うようになりません。 現在のコードは Private Sub 次ページへ_Click() If ActiveSheet.Name <> "23.日本太郎" Then ActiveSheet.Next.Activate End If End Sub ---------------------------------- Private Sub 前に戻る_Click() On Error Resume Next If ActiveSheet.Name <> "1.日本花子" Then ActiveSheet.Previous.Activate End If End Sub これを Dim i As Integer For i = 1 To Worksheets.Count - 6 などを使って作りたいです、なぜかというとシートの増減で名前が変わったとき、いちいち名前を変更しなければならないからです。

  • VBA 選択したセルが空白であったらシートを削除

    こんばんは!いつもお世話になっています。 選択したシート1のセル(C9)が空白であったら、選択したシートを削除するマクロ(VBA)を作りましたが、上手く作動しなくて困っています。 どうしたらよいのかよろしくお願い致します。 'シート1のセルC9を選択し、空白か判断する Sub セルの選択()   Worksheets("Sheet1").Activate   Range("C9").Select  If Len(Application.Trim(ActiveCell)) = 0 Then   MsgBox("空白セル")  End If End Sub '現在アクティブなシートを削除する Sub DeleteWorksheet() Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End Sub

  • リストボックスから選択したシートを削除したい

    Excel2007でマクロ作成の初心者です。 リストボックスの選択項目のワークシートを削除したいのですが、 「インデックスが有効範囲にありません。」のエラーが発生し、 先に進めません。どうしたらよろしいでしょうか? ’--------------------- Private Sub 顧客削除_Click() Application.ScreenUpdating = False Unload Me Unload DS請求フォーム Dim i As Integer With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then ' Worksheets(.list(.ListIndex)).Delete Worksheets(Split(.list(.ListIndex - 0), " ")(1)).Activate '←ここでエラー発生 ActiveSheet.Delete End If Next i End With MsgBox "選択の顧客を削除しました。" End Sub ’------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’----------------------

専門家に質問してみよう