重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

お世話になります。マクロ初心者です。

マクロでSheet1、Sheet2、Sheet3、Sheet4、の
4枚のワークシートを削除したいと思っています。

ワークシートがない場合もあるので、エラー対策をネットで調べて、
とりあえずSheet1だけ削除するマクロを作成しました。

ここまではいいのですが、IF構文がちょっと複雑で
Sheet1、Sheet2、Sheet3、Sheet4、の
4枚のワークシートを削除する場合のコードの書き方がわかりません。

すいませんが詳しい方、説明の上手な方、直接、コードで説明できる方、
教えて下さい。よろしくお願いします。
私が作成したSheet1だけ削除するマクロのコードは以下の通りです。

こちらのコードを改良してもOKですし、オリジナルのコードでも
Sheet1、Sheet2、Sheet3、Sheet4、の4枚のワークシートが削除出来て、
シートがない場合のエラー対策が取られていれば問題ありません。
※当然ですがワークシートは全部で5枚以上あります。

すいませんが、よろしくお願いします。

-------------------

Sub Macro2()

Dim ws As Worksheet, flag As Boolean
For Each ws In Worksheets
If ws.Name = "Sheet1" Then flag = True
Next ws
If flag = True Then

Worksheets("Sheet1").Delete
Else
MsgBox "[Sheet1]はありません", vbInformation
End If

End Sub

A 回答 (3件)

1例です。


---------------------------------
Public Sub Sample()
DeleteWorkSheet ("Sheet1")
DeleteWorkSheet ("Sheet2")
DeleteWorkSheet ("Sheet3")
DeleteWorkSheet ("Sheet4")
End Sub
'ワークシートがあるなら、それを削除する
Private Sub DeleteWorkSheet(ByVal SheetName As String)
If ExistsWorkSheet(SheetName) = True Then
Worksheets(SheetName).Delete
Else
MsgBox ("[" & SheetName & "]はありません。")
End If
End Sub
'ワークシートの存在チェック
Public Function ExistsWorkSheet(ByVal SheetName As String) As Boolean
Dim ws As Worksheet
ExistsWorkSheet = False
For Each ws In Worksheets
If ws.Name = SheetName Then
ExistsWorkSheet = True
Exit Function
End If
Next ws
End Function
-----------------------------------------------
    • good
    • 1
この回答へのお礼

今回はご解答ありがとうござます。

加えて、前回のご解答、本当にありがとうございました。 

【VBA】3個のワークブックから同時にシートをコピーしたい
http://bit.ly/2h1yK2p


今回のマクロは前回のものと組み合わせて使います。
仕事で使うので、こちらでは時々お世話になっております。

機会がありましたら、またお願いします。
特にワークシート関連のマクロがお得意のようですので

お礼日時:2016/12/06 23:23

思いっきり手抜きのコードで。



Sub Sample()
 Dim ara As Variant
 Dim itm As Variant
 ara = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")
 On Error Resume Next
 Application.DisplayAlerts = False
 For Each itm In ara
  Sheets(itm).Delete
  If Err <> 0 Then
   MsgBox "[" & itm & "]" & " はありません"
   Err.Clear
  End If
 Next
 Application.DisplayAlerts = True
End Sub
    • good
    • 1
この回答へのお礼

ご解答ありがとうございます。
すごいシンプルなマクロで、「こういうのもありなんだ」と思いました。

今回、こちらのページで頂いた3つのマクロはどれも優秀なマクロばかりなので、
ベストアンサーに迷いました。

そんな中でNo.3のtatsu99さんは前回の関連した質問にも
答えて頂いているので、今回は前回の質問からの引き継ぎ、、、
ということもあり、ベストアンサーはtatsu99さんにさせて頂きました。

今回はユニークなコードを書いて頂き、ありがとうございます。
機会がありましたら、またお願い致します。

前回の質問はこちらです ↓
「【VBA】3個のワークブックから同時にシートをコピーしたい」
http://bit.ly/2h1yK2p

お礼日時:2016/12/06 23:16

こんにちは!



一例です。

Sub Sample1()
Dim i As Long, k As Long, myAry As Variant, myFlg As Boolean
Dim sN As String, myStr As String
myAry = Array(1, 2, 3, 4)
For k = 0 To UBound(myAry)
sN = "Sheet" & myAry(k)
For i = 1 To Worksheets.Count
If Worksheets(i).Name = sN Then
Application.DisplayAlerts = False
Worksheets(sN).Delete
Application.DisplayAlerts = True
myFlg = True
Exit For
End If
Next i
If myFlg = False Then
myStr = myStr & "[" & sN & "]" & ","
End If
myFlg = False
Next k
If Len(myStr) > 0 Then
MsgBox Left(myStr, Len(myStr) - 1) & "はありません。", vbInformation
End If
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 1
この回答へのお礼

いつもご解答頂きありがとうございます。
頂いたコードを走らせてみてびっくりしました。

理由の1つは「選択したシートに、データが存在する可能性があります。~」
のメッセージが表示されないことで、
もう1つはSheet1、Sheet2、Sheet3、Sheet4、の全部のシートがない場合、
1回のエラーメッセージで「[Sheet1],[Sheet2],[Sheet3],[Sheet4]はありません」
と表示されることです。

実用性抜群で、いつもならベストアンサーですが、、、。

今回のマクロは前回の「【VBA】3個のワークブックから同時にシートをコピーしたい」
http://bit.ly/2h1yK2p

で頂いたマクロと組み合わせて使います。

前回のマクロを提供して頂いたのが、No1のtatsu99さんですので、
今回は前回のマクロを提供して下さった、tatsu99さんにベストアンサーをゆずらせて頂きます。

いつもご解答頂きありがとうございます。
機会がありましたら、またお願い致します。

お礼日時:2016/12/06 23:02

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