プロが教える店舗&オフィスのセキュリティ対策術

同一のブック内に存在する複数シートのうち任意のシートのみを削除することはVBAで可能でしょうか?
(例)
 消したくないシート:TEMP1、TEMP2の2シート
 消したいシート:1、2、3....といった連番シート (VBAで作成したシート)
環境は、WIN XP PRO でEXCEL2003を使用しています。
宜しくお願い致します。

A 回答 (3件)

Sub Sample()



Dim Sh As Worksheet

For Each Sh In Sheets
If Not (Sh.Name = "TEMP1" Or Sh.Name = "TEMP2") Then
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
End If
Next

End Sub

質問とは逆の判定のしかたですが、これではどうでしょうか?
    • good
    • 6
この回答へのお礼

無事削除することが出来ました。有難うございました。

お礼日時:2005/12/30 09:10

こんにちは。



私は、#1 さんので十分だと思いますが、あえて、私が書かせていただくとすれば、こうなるのではないかと思います。

Sub SpecifiedSheetsDelete()
Dim sh As Object
For Each sh In ActiveWorkbook.Sheets
 If ActiveWorkbook.Sheets.Count = 1 Then Exit For
 If Not StrConv(sh.Name, vbUpperCase) Like "TEMP[12]" Then
  Application.DisplayAlerts = False
  sh.Delete
  Application.DisplayAlerts = True
 End If
Next
End Sub


ただ、

(1) 消したくないシート:TEMP1、TEMP2の2シート
(2) 消したいシート:1、2、3....といった連番シート

一体、どちらなのかは、多少分らない部分があります。
>(VBAで作成したシート)
というからには、ある程度、規則を持って作ったのでしょうから、その裏返しをすればよいだけです。

(1)
If Not StrConv(sh.Name, vbUpperCase) Like "TEMP[12]" Then

(2)
If IsNumeric(sh.Name) Then

ということになりますね。
    • good
    • 1
この回答へのお礼

親切丁寧に御回答頂き、本当に有難うございます。

お礼日時:2005/12/30 09:16

(1)削除するシートの数が2-30までなら


CTRLキーを押しながら、マウスで削除するシートタブをクリックして、
Sub test01()
ActiveWindow.SelectedSheets.Delete
End Sub
を実行する。
(2)削除するシートタブを集めておいて(残すシートを範囲外に
ドラッグしておいて
Sub test02()
MsgBox Sheets("東京").Index
For i = 1 To Sheets("東京").Index
Sheets(1).Delete
Next i
End Sub
抹消するシートのシートタブのかたまりの最右のシート名が東京であった場合の例。
(3)削除シート数が、少ないときは
Sub test03()
Sheets(Array("Sheet31", "Sheet30", "Sheet24")).Select
Sheets("Sheet31").Activate
ActiveWindow.SelectedSheets.Delete
End Sub
のようなほうほうもある。
    • good
    • 1
この回答へのお礼

この方法でも削除出来ました。有難うございます。

お礼日時:2005/12/30 09:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています