指定文字を含むシートのみ纏めて削除または残す

前回は、マクロの処理速度に影響しそうなものを纏めて止めてみた。
infoment.hatenablog.com

今日も、前回の続きから。
f:id:Infoment:20210912094829p:plain

マクロで自動処理する際、一時的な作業用シートを作成する場合がある。
そこで一時的なシートには、消去の可否を示す目印をつける場合がある。
※あるいは、消去不可のシートに目印をつけることもある。

そこで、前回の「警告を出さずに消去する関数」の発展形として、
「目印を含むものを纏めて消す/または残す関数」を作成してみた。

前回と同様、クラスモジュール「AppControl」に追記する。

消す/残すを選択するための列挙体。

Public Enum DeleteType
    sdDelete
    sdRemain
End Enum

今回作成した関数。

' 指定したシートを残す、または削除。
Public Function SpecifiedSheetDelete(specified_sheet_name As String, _
                            Optional LookAt As XlLookAt = xlWhole, _
                            Optional delete_type As DeleteType = DeleteType.sdDelete) As Boolean
                            
    Dim Ws As Worksheet
    
        On Error GoTo er:
    
        ' 部分一致の場合。
        If LookAt = xlPart Then
            specified_sheet_name = "*" & specified_sheet_name & "*"
        End If
        
        ' 各シート名を評価して選択削除。
        For Each Ws In Worksheets
        
            ' シート数が1の時点でループを抜ける。
            ' ※シート数1で削除しようとするとエラーになるため。
            If Worksheets.Count = 1 Then GoTo er:
            
            ' 指定文字を含む場合に削除(完全一致を含む)。
            If delete_type = sdDelete Then
                If Ws.Name Like specified_sheet_name Then
                    If Not SheetDeleteWithoutAlerts(Ws) Then GoTo er:
                End If
            
            ' 指定文字を含まない場合に削除(完全一致を含む)。
            Else
                If Not Ws.Name Like specified_sheet_name Then
                    If Not SheetDeleteWithoutAlerts(Ws) Then GoTo er:
                End If
            End If
        Next
        
        SpecifiedSheetDelete = True
        Exit Function
        
er:
        SpecifiedSheetDelete = False
        
End Function

それでは、こちらで確認してみよう。
今回は、シート名に「●」を含むものだけ削除する。

Sub test()

    Dim ApC As VBAProject.AppControl
    Set ApC = New VBAProject.AppControl
        ApC.SpecifiedSheetDelete "●", xlPart, sdDelete

End Sub

↓ 結果は、以下のとおり。

f:id:Infoment:20210912100923g:plain

地味だけど、結構便利かもしれない。
次回に続きます。

参考まで。