指定パターンのシート名のみ纏めて削除または残す

前回は指定文字を含むシート、または含まないシートを纏めて消してみた。
infoment.hatenablog.com
今日も、前回の続きから。
f:id:Infoment:20210913224524p:plain

自動処理をする過程で、例えばこのように、年月を6ケタの数字で表した
名前のシートが複数登場する場合がある。
f:id:Infoment:20210913225302p:plain

これらを「数字6桁」のようにパターンで探して消したり、或いは残したり
とする需要が、少なくとも私個人にはある。

ということで、作ってみた。これは昨日のものとほぼ同じだが、違いとして
「完全一致/部分一致」の引数は省いてある。パターンマッチには正規表現
使用しているので、パターンを指定できる方であれば、そこで部分一致⇔完全
一致を併せて切り替えられるだろう、というのがその理由だ。

先日までと同様、下記はクラスモジュール「AppControl」に追記してある。

' 指定したパターンとマッチする名前のシートを残す、または削除。
Public Function RegExpSheetDelete(specified_pattern As String, _
                         Optional delete_type As DeleteType = DeleteType.sdDelete) As Boolean
                            
    Dim myReg As Object
    Set myReg = CreateObject("VBScript.RegExp")
    
        ' 正規表現のパターン設定。
        myReg.Pattern = specified_pattern
    Dim Ws As Worksheet
    
        On Error GoTo er:
        
        ' 各シート名を評価して選択削除。
        For Each Ws In Worksheets
        
            ' シート数が1の時点でループを抜ける。
            ' ※シート数1で削除しようとするとエラーになるため。
            If Worksheets.Count = 1 Then GoTo er:
            
            ' 指定パターンに一致する場合に削除。
            If delete_type = sdDelete Then
                If myReg.Test(Ws.Name) Then
                    If Not SheetDeleteWithoutAlerts(Ws) Then GoTo er:
                End If
            
            ' 指定パターンに一致しない場合に削除。
            Else
                If Not myReg.Test(Ws.Name) Then
                    If Not SheetDeleteWithoutAlerts(Ws) Then GoTo er:
                End If
            End If
        Next
        
        On Error GoTo 0
        
        RegExpSheetDelete = True
        Exit Function
        
er:

        On Error GoTo 0
        
        RegExpSheetDelete = False
        
End Function

それでは、こちらで確認してみよう。削除対象となるのは、一番左にある
「Sheet1」以外の3つだ(202106~202108)。
f:id:Infoment:20210913225302p:plain

↓ これで、シート名が数字6桁のシートのみ、一括で削除する。

Sub Test()

    Dim ApC As VBAProject.AppControl
    Set ApC = New VBAProject.AppControl
        ApC.RegExpSheetDelete "^\d{6}$"

End Sub

f:id:Infoment:20210913225531g:plain

こちらも、それなりに使えそうだ。
次回に続きます。

参考まで。