確認ダイアログを表示せずに、シートを動的に作成・削除する方法【Excel VBA】

Excel VBAにおけるシートの存在により動的にシート作成・削除をする方法を説明しています。

また、VBAでシートを削除しようとすると、確認ダイアログが表示される場合がありますが、これを表示しない方法も紹介します。

シートを動的に作成

全シート分ループして、一致するシート名があるか探していきます。
シートが見つかったらフラグを更新してループを抜けます。

フラグの値は

  • シートが存在しなければFalse
  • シートが存在すればTrue

となります。

シートを作成する条件はフラグがFalseのときなので、シートが見つからない場合のみ新しくシートを作成することになります。

Dim isExist 'シートが存在する:True、存在しない:False
isExist = False

'シートの存在確認
For i = 1 To WorkSheets.Count
  If WorkSheets(i).name = "シート名" Then
    isExist = True
    Exit For
  End If
Next i

'シートが存在しなければシートの作成
If isExist = False Then
  Worksheets.Add
  ActiveSheet.Name = "シート名"
End If

シートを動的に削除

全シート分ループして、一致するシート名があるか探していきます。
シートが見つかったらシートを削除してループを抜けます。

シートを削除するときに確認ダイアログが出る場合があります。
ダイアログを選択するまでマクロが止まってしまうため、ダイアログを出さないように設定しましょう。

Application.DisplayAlertsの値によってダイアログの表示を制御できます。

  • True:ダイアログを表示する
  • False:ダイアログを表示しない

シート削除前にFalseに設定して、シート削除後にTrueに設定し直しましょう。

'ダイアログを表示しないようにする
Application.DisplayAlerts = False

'シートが存在したら削除
For i = 1 To WorkSheets.Count
  If WorkSheets(i).name = "シート名" Then
    WorkSheets("シート名").Delete
    Exit For
  End If
Next i

'ダイアログを表示するようにする
Application.DisplayAlerts = True

確認ダイアログを表示しないようにするには?

1つ前で説明した「Application」は現在開いているExcelアプリケーションのことを指しています。
以下のように「New Excel.Application」で開いているワークブック内のシートを削除する場合、新しく開いたオブジェクト(obj)を指定しなければいけません。
「Application」が「obj」に置き換わっています。

Dim obj As New Excel.Application
Dim workbook As Workbook
Set workbook = obj.Workbooks.Open(Filename:="C:\book.xlsx", ReadOnly:=False, IgnoreReadOnlyRecommended:=True)

'ダイアログを表示しないようにする
obj.DisplayAlerts = False

'シートが存在したら削除
For i = 1 To workbook.WorkSheets.Count
  If workbook.WorkSheets(i).name = "シート名" Then
    workbook.WorkSheets("シート名").Delete
    Exit For
  End If
Next i

'ダイアログを表示するようにする
obj.DisplayAlerts = True

'ワークブックを保存して閉じる
workbook.Save
workbook.Close

まとめ

シートの存在確認を応用することで動的にシート作成・削除が可能となります。

シートの削除を行う場合、確認ダイアログを表示しないように設定することでマクロのみで完結するようにできます。
注意点として、別ワークブックの場合はオブジェクトの指定方法を変える必要があります。

VBA
この記事を書いた人

エンジニアとして仕事をしています。
仕事や趣味を通して、開発やプログラミングについて学んだことを綴っていきます。
 ・実務経験は、WEBシステムのサーバーサイドコーディングがメイン
 ・アプリ開発は趣味程度

akihiro-takedaをフォローする
akihiro-takedaをフォローする
プログラミング・開発の備忘録
タイトルとURLをコピーしました