【VBA】新しいシートの挿入

こんてんつ

新しいシートの挿入方法について紹介する。名前が重複した場合に、何もしないか上書きするか、2択で選べるようにした。

  1. 単にシートを追加する
  2. 指定の名前のシートが存在しなかったら追加する
  3. 指定の名前のシートが存在したら上書きする

単にシートを追加する

コード

Sub Macro1()

Dim newSheet As Worksheet
Set newSheet = Worksheets.Add(After:=Sheets(Worksheets.Count))
newSheet.Name = "test"

End Sub

出力

f:id:norunblog:20210911114410p:plain

解説

Worksheets.Add(After:=Sheets(Worksheets.Count))は一番後ろ(末尾、最後)にSheetを追加の意味。

指定の名前のシートが存在しなかったら追加する

コード

Sub Macro2()

createSheet ("test")

End Sub

'以下自作のcreateSheet関数

Function createSheet(argNewSheetName As String)

Dim ws As Worksheet
Dim existFlg As Boolean

existFlg = False

For Each ws In ThisWorkbook.Worksheets
    
    If ws.Name = argNewSheetName Then
        existFlg = True
        Exit For
    End If
    
Next

If existFlg = False Then
    Dim newSheet As Worksheet
    Set newSheet = Worksheets.Add(After:=Sheets(Worksheets.Count))
    newSheet.Name = argNewSheetName
End If
    
End Function

解説

existFlgにて、シートが存在するか否かを調べる。その後Falseの場合argNewSheetNameの名前でシートを追加する。

指定の名前のシートが存在したら上書きする

コード

Sub Macro3()

createSheetOverwrite ("test")

End Sub

'以下自作のcreateSheetOverwrite関数

Function createSheetOverwrite(argNewSheetName As String)

Dim ws As Worksheet
Dim existFlg As Boolean

existFlg = False

For Each ws In ThisWorkbook.Worksheets
    
    If ws.Name = argNewSheetName Then
        existFlg = True
        Exit For
    End If
    
Next

If existFlg = True Then
    Application.DisplayAlerts = False
    Sheets(argNewSheetName).Delete
End If

Dim newSheet As Worksheet
Set newSheet = Worksheets.Add(After:=Sheets(Worksheets.Count))
newSheet.Name = argNewSheetName
    
End Function

解説

existFlgにて、シートが存在するか否かを調べる。その後Trueの場合そのシートを一回Deleteする。その後ろは、True or Falseに関わらず、argNewSheetNameの名前でシートを追加する。