VBA100本ノック 14本目:社外秘シート削除

こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。

上記リンク先から、問題文を転載。
f:id:Infoment:20220122225031p:plain

手順としては、問題文が示す順に処理するのが順当なところか。

Sub VBA_100Knock_014()
    Dim Ws As Worksheet
    Dim TargetSheetCount As Long
    ' 「社外秘」が含まれるシートの数を数える。
        For Each Ws In Worksheets
            If Ws.Name Like "*社外秘*" Then
                TargetSheetCount = TargetSheetCount + 1
            End If
        Next
        
        If TargetSheetCount = Worksheets.Count Then
            MsgBox "全てのシート名に「社外秘」が含まれているため" & vbNewLine & _
                   "処理を中断します。"
            Exit Sub
        End If
    
        Application.ScreenUpdating = False
    
    Dim r As Range
    ' 各シートの各セルについて、数式を値に置き換える。
        For Each Ws In Worksheets
            For Each r In Ws.UsedRange
                If r <> vbNullString Then
                    If r.HasFormula Then
                        r = r.Text
                    End If
                End If
            Next
        Next
        
        Application.DisplayAlerts = False
        
    ' 社外秘をシート名に含むシートを削除。
        For Each Ws In Worksheets
            If Ws.Name Like "*社外秘*" Then
                Ws.Delete
            End If
        Next
        
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
End Sub

全てのシート名に「社外秘」が含まれていれば、処理は中断しなければ
ならない。しかも中断は、数式を値に置き換える前が望ましい。

ということでブック内のシートを三周する、ちょっと面倒くさい感じの
コードになってしまった。

※冒頭リンク先の解答例および解説も、ぜひご一読ください。

参考まで。