公開日:
不要なシートを一括削除するVBAサンプルコード【Excel】
2023年12月
Excelを使って資料を作るとき、データ集計のために一時的に作成したが そのあとには一切使うことがないシート(不要なシート)が、しばしば作り出されます。そういうシートは、そのままにしておくとシートの数がどんどん増えていって、本当に必要なデータを圧迫してしまいます。したがって、不要なシートをこまめに削除することが、資料作成の作業効率向上において、有用です。
そこで、この記事では下図のような複数のシートを考えます。
[ 画像1. 5つのシート ]
ここにはシートが5つあります。シートの名前は以下のとおりです。
- Sheet1
- Sheet2
- データ1
- データ2
- データ3
ここでは、「データ1」、「データ2」、「データ3」というシートを、不要なシートであるとします。したがって、やりたい事は、不要なシートである「データ1」~「データ3」だけを削除することです。
以下は、サンプルコードです。
Public Sub deleteDataSheets()
Dim sheetNames() As String
indexNum = -1 '配列の添え字
'全てのシート名を配列に格納する。
For i = 1 To ThisWorkbook.Sheets.Count
 indexNum = indexNum + 1
 ReDim Preserve sheetNames(indexNum)
 sheetNames(indexNum) = ThisWorkbook.Sheets(i).Name
Next i
'全てのシート名に対して処理を実行する。
For i = 0 To UBound(sheetNames)
 sName = CStr(sheetNames(i))
 If (sName <> "Sheet1") And (sName <> "Sheet2") Then
Application.DisplayAlerts = False '確認ダイアログ無効。
ThisWorkbook.Sheets(sName).Delete
Application.DisplayAlerts = True  '確認ダイアログ有効。
 End If
Next i
End Sub
Dim sheetNames() As String
indexNum = -1 '配列の添え字
'全てのシート名を配列に格納する。
For i = 1 To ThisWorkbook.Sheets.Count
 indexNum = indexNum + 1
 ReDim Preserve sheetNames(indexNum)
 sheetNames(indexNum) = ThisWorkbook.Sheets(i).Name
Next i
'全てのシート名に対して処理を実行する。
For i = 0 To UBound(sheetNames)
 sName = CStr(sheetNames(i))
 If (sName <> "Sheet1") And (sName <> "Sheet2") Then
Application.DisplayAlerts = False '確認ダイアログ無効。
ThisWorkbook.Sheets(sName).Delete
Application.DisplayAlerts = True  '確認ダイアログ有効。
 End If
Next i
End Sub
このコードを実行すると、「データ1」~「データ3」が削除されます。「Sheet1」と「Sheet2」は削除されず、残ります。
[ 画像2. コードを実行した結果 ]
今回の感想:
VBAで、不要なシートを削除するためのコードを書きました。
シート削除のような単純な作業は、人の手で行うことも可能です。また、シートが少ないときは人の手でおこなったほうが、コードで実行するよりも むしろ効率がいいと思われます。しかし、シートが多くなってきたとき、このような単純作業をVBAやマクロで自動化しておくと、便利です。すなわち、VBAで単純作業のプロシージャ(関数)を書けるようにしておくことは、仕事に役立つことだと思います。