プロが教えるわが家の防犯対策術!

こんにちは。

特定の名前のワークシートを削除するのにいちいち
Worksheets("機種").Delete
Worksheets("条件").Delete
Worksheets("対象").Delete
などと削除するシートの枚数分.Deleteを書かずに
for nextのような構文を使用して削除したいと思います。

このときの書き方をお教えください。
よろしくお願いいたします。

A 回答 (3件)

特定の名前を限定する方法の方こそ、質問課題ではないか?


だからピンとハズレだと思う。
場合によってはプログラムの中にシート名を書くことに適否見解は在ると思う。
やさしい例
Sheet1-Sheet6作っておいて実行してみて。
Sub test01()
sn = Array("Sheet6", "Sheet5")
MsgBox UBound(sn)
For Each sh In Worksheets
For i = 0 To UBound(sn)
If sh.Name = sn(i) Then
sh.Delete
Exit For
End If
Next i
Next
End Sub
ただ上記のような書き方はコード経済(少ないコード行数で済ます)にはなるが、実行では変わらない、むしろ時間がかかる(気にしないで良いが)かも。
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはり適材適所でfor-next文は使う物なのですね

お礼日時:2011/12/27 08:43

Option Explicit



Private Sub CommandButton1_Click()
On Error Resume Next
  Dim I As Integer
  Dim N As Integer
  Dim delSheets As String

  delSheets = "Sheet5;Sheet6;Sheet7"
  N = CharCount(delSheets, ";") + 1
  Application.DisplayAlerts = False
  For I = 1 To N
    Worksheets(CutStr(delSheets, ";", I)).Delete
  Next I
  Application.DisplayAlerts = False
End Sub

1、消すリストを作成。
2、消すリスト数を取得
3、消すシート名を取得

Option Explicit

Public Function CutStr(ByVal Text As String, ByVal Separator As String, ByVal N As Integer) As String
  Dim strDatas() As String

  strDatas = Split("" & Separator & Text, Separator, , 0)
  CutStr = strDatas(N * Abs(N <= UBound(strDatas)))
End Function

Public Function CharCount(ByVal Text As String, ByVal C As String) As Integer
  CharCount = Len(Text) - Len(Replace(Text, C, ""))
End Function
    • good
    • 0
この回答へのお礼

やはりプログラムとして長すぎて本末転倒ですね。
ありがとうございます

お礼日時:2011/12/27 08:43

一例です。



Sub sample()
シート名 = "機種,条件,対象"
Application.DisplayAlerts = False
For Each st In Worksheets
res = InStr(シート名, st.Name)
If res Then st.Delete
Next
Application.DisplayAlerts = True
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
マクロの例として参考にさせていただきます

お礼日時:2011/12/27 08:44

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