ワークシート削除処理について、現在下記構文で指定のワークシート名が存在していたら
そのワークシートを削除するということを実施しています。
逆に、指定のワークシート名以外のワークシートが存在していたらそれを削除する、みたい
なことをしたいのですが、どのようにすれば良いか構文をご教授お願い致します。
(例として、SHEET1、SHEET2、SHEET3、以外のワークシートが存在した場合、その3つの
ワークシート以外のワークシートを削除。)
Dim ws1 As Worksheet, flag As Boolean
For Each ws1 In Worksheets
If ws1.Name = "SHEET1" Then flag = True
Next ws1
If flag = True Then
Worksheets("SHEET1").Delete
Else
End If
Set ws1 = Nothing
flag = False
For Each ws1 In Worksheets
If ws1.Name = "SHEET2" Then flag = True
Next ws1
If flag = True Then
Worksheets("SHEET2").Delete
Else
End If
Set ws1 = Nothing
flag = False
No.1
- 回答日時:
こんな感じでどうですか?
Sub test()
Dim ws As Worksheet
Dim wsNotDelete As Variant
Dim wsDelete As Variant
Dim i As Long
Dim shouldDelete As Boolean
'削除しないシート名リスト
wsNotDelete = Array("Sheet1", "Sheet2", "Sheet3")
'削除するシート名リスト
wsDelete = Array()
For Each ws In Worksheets
shouldDelete = True
For i = LBound(wsNotDelete) To UBound(wsNotDelete)
If ws.Name = wsNotDelete(i) Then
shouldDelete = False
Exit For
End If
Next
If shouldDelete Then
'本シート名を削除するリストに追加
ReDim Preserve wsDelete(UBound(wsDelete) + 1)
wsDelete(UBound(wsDelete)) = ws.Name
End If
Next
'Application.DisplayAlerts = False
'削除するリストのシートを削除
For i = LBound(wsDelete) To UBound(wsDelete)
Worksheets(wsDelete(i)).Delete
Next
'Application.DisplayAlerts = True
End Sub
No.2ベストアンサー
- 回答日時:
こんな感じでは?
大文字、小文字を区別しません。
Sub Sample()
Dim ShList As Variant
Dim sel() As Boolean
Dim cnt As Integer
Dim sh As Variant
Dim i As Integer
ShList = Array("SHEET1", "Sheet2", "SHEET3")
cnt = ActiveWorkbook.Sheets.Count
ReDim sel(1 To cnt)
On Error Resume Next
For Each sh In ShList
sel(Sheets(sh).Index) = True
Next
On Error GoTo 0
Application.DisplayAlerts = False
For i = cnt To 1 Step -1
If Not sel(i) Then
Sheets(i).Delete
End If
Next
Application.DisplayAlerts = True
End Sub
No.3
- 回答日時:
>SHEET1、SHEET2、SHEET3、以外のワークシートが存在した場合、
>その3つの ワークシート以外のワークシートを削除。)
パターンを書き換えれば、いろんなバリエーションが可能です。
シート名を設定する時に、ミスするのは、全角・半角を混在することです。
'//標準モジュール
Sub WshDelete()
Dim ws As Worksheet
Dim ShNames As Variant
Dim i As Long, j As Long
Const PAT As String = "sheet[1-3]" '残すシート(小文字にする)
Worksheets(Worksheets.Count).Select 'あまり意味がない
For i = 1 To Worksheets.Count
If Not StrConv(Trim(Worksheets(i).Name), vbNarrow + vbLowerCase) Like PAT Then
ShNames = ShNames & "," & Worksheets(i).Name
j = j + 1
End If
Next
If (i - 1) > j And j > 0 Then
Worksheets(Split(Mid(ShNames, 2), ",")).Select
If MsgBox(j & " シートを削除してよろしいですか。", vbQuestion + vbOKCancel) = vbCancel Then
Worksheets(1).Select
Else
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End If
Else
MsgBox "削除できません。", vbCritical
Worksheets(1).Select 'シートグループの解除
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) シート削除のマクロで「deleteメソッドは失敗しました」となります。助けてください! Sub 不要 6 2022/09/08 16:41
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでブック内の倍率がバ...
-
EXCELで複数のシートを一度に「...
-
特定のシートのみ再計算させな...
-
エクセルで複数のシートに画像...
-
エクセル シート同士の引き算
-
SUMIF関数【複数のシート...
-
エクセルのシー名を二段表示に...
-
EXCELの「シートの見出し」のフ...
-
エクセル シートのグループ化...
-
アクセスからエクセルのシート...
-
エクセルの2つのシートを並び...
-
エクセルでシート数が分からな...
-
複数シートの選択解除の方法
-
Excelでの複数シートにまたがる...
-
ワークシートそのものの色を変...
-
DATE関数 4月31日などのあ...
-
エクセルでリンク貼り付けした...
-
エクセルのシートが消えた
-
Accessのテーブルを既存のExcel...
-
エクセル、別のシートの表をポ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
特定の複数のシートに同じ処理...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
おすすめ情報