指定文字を含むシートのみ纏めて削除または残す
前回は、マクロの処理速度に影響しそうなものを纏めて止めてみた。
infoment.hatenablog.com
今日も、前回の続きから。
マクロで自動処理する際、一時的な作業用シートを作成する場合がある。
そこで一時的なシートには、消去の可否を示す目印をつける場合がある。
※あるいは、消去不可のシートに目印をつけることもある。
そこで、前回の「警告を出さずに消去する関数」の発展形として、
「目印を含むものを纏めて消す/または残す関数」を作成してみた。
前回と同様、クラスモジュール「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
↓ 結果は、以下のとおり。
地味だけど、結構便利かもしれない。
次回に続きます。
参考まで。