Excel VBAでは、新しいシートを追加し、指定したシート名をつけることができます。これを活用することで、レポート作成やデータ管理の自動化が可能になります。
シートを追加して名前を付ける方法を、基本から活用方法までわかりやすく解説します。
目次
新しいシートを追加する
VBA のSheets.Addメソッドを使用する場合、新しいシートを追加できます。
Sub AddSheet()
Sheets.Add
End Sub
解説
- 上記のコードを実行すると、新しいシートが最新のアクティブなシートの前(左側)に追加されます。
- 「Sheet1」や「Sheet2」といった名前が自動で付けられます。
シートに名前を付ける
追加したシートに名前を付けるには、Nameプロパティを使用します。
Sub AddSheetWithName()
Dim newSheet As Worksheet
' 新しいシートを追加してオブジェクトを取得
Set newSheet = Sheets.Add
' シートに名前を付ける
newSheet.Name = "新しいシート"
End Sub
解説
Setを使ってnewSheetに新しいシートを入れています。【VBA】Setのわかりやすい活用方法と活用場面Nameプロパティを指定するため、シートの名前を変更します。
指定した位置にシートを追加する
BeforeまたはAfterプロパティを使用して、特定の位置にシートを追加できます。
【指定したシートの前に追加】
Sub AddSheetBefore()
Sheets.Add Before:=Sheets("Sheet1")
End Sub
解説
Beforeプロパティで、「Sheet1」の前(左側)に新しいシートを追加します。
【指定したシートの後に追加】
Sub AddSheetAfter()
Sheets.Add After:=Sheets("Sheet1")
End Sub
解説
Afterプロパティで、「Sheet1」の後(右側)に新しいシートを追加します。
ユーザー入力に基づいて名前を付ける
InputBoxを使って、ユーザーが入力した名前で新しいシートを作成することもできます。
Sub AddSheetWithUserName()
Dim sheetName As String
Dim newSheet As Worksheet
' ユーザーに名前を入力させる
sheetName = InputBox("新しいシートの名前を入力してください:")
' 名前が空白でなければシートを追加
If sheetName <> "" Then
Set newSheet = Sheets.Add
On Error Resume Next ' 名前の重複エラーを無視
newSheet.Name = sheetName
If Err.Number <> 0 Then
MsgBox "同じ名前のシートが存在します。", vbExclamation
Application.DisplayAlerts = False
newSheet.Delete
Application.DisplayAlerts = True
End If
On Error GoTo 0
Else
MsgBox "名前が入力されませんでした。", vbInformation
End If
End Sub
解説
InputBoxユーザーに名前を入力させます。【VBA】InputBoxの活用方法- シート名が重複する場合、エラーを処理して追加をキャンセルします。【VBA】GoToステートメントの理解と使用方法
複数のシートを追加して名前を付ける
複数のシートを連続して追加し、それぞれに名前を付けます。
Sub AddMultipleSheets()
Dim sheetNames As Variant
Dim i As Integer
Dim newSheet As Worksheet
' 追加するシート名を配列で定義
sheetNames = Array("月次報告", "週次報告", "日次報告")
' シートを追加して名前を設定
For i = LBound(sheetNames) To UBound(sheetNames)
Set newSheet = Sheets.Add
On Error Resume Next
newSheet.Name = sheetNames(i)
If Err.Number <> 0 Then
MsgBox "シート名 '" & sheetNames(i) & "' は既に存在します。", vbExclamation
newSheet.Delete
End If
On Error GoTo 0
Next i
End Sub
解説
- 配列に追加するシート名を
sheetNamesに定義します。【VBA】For文:配列の使用方法 Forループに名前を付けながらシートを追加します。
シート名が存在するか確認する
シートを追加する前に、名前が既に存在するかチェックすることでエラーを回避できます。
Function SheetExists(sheetName As String) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = Sheets(sheetName)
SheetExists = Not ws Is Nothing
On Error GoTo 0
End Function
Sub AddSheetIfNotExists()
Dim sheetName As String
Dim newSheet As Worksheet
sheetName = "チェックシート"
If Not SheetExists(sheetName) Then
Set newSheet = Sheets.Add
newSheet.Name = sheetName
MsgBox "シート '" & sheetName & "' を追加しました。"
Else
MsgBox "シート '" & sheetName & "' は既に存在します。"
End If
End Sub
解説
SheetExists関数でシート名が存在するか確認します。- 存在しない場合のみ新しいシートを追加します。【VBA】シートがなければ作成する方法
シートの名前を動的に作成
日付や時刻を基にシート名を動的に作成することも可能です。
Sub AddSheetWithDynamicName()
Dim newSheet As Worksheet
Dim sheetName As String
' 日付を基にシート名を作成
sheetName = Format(Date, "yyyy-mm-dd")
If Not SheetExists(sheetName) Then
Set newSheet = Sheets.Add
newSheet.Name = sheetName
Else
MsgBox "シート '" & sheetName & "' は既に存在します。", vbExclamation
End If
End Sub
解説
Format関数を使用して最新の日付を指定します。【VBA】format関数:「日時・桁数・0埋め・Now」使用方法- シート名として日付を利用することで、ユニークな名前を自動生成します。
まとめ
Excel VBAを使ったシートの追加と名前付けのポイントは以下の通りです。
Sheets.Addメソッドで新しいシートを追加。Nameプロパティを使ってシートに名前を付けます。- 重複チェックでエラーを回避します。
- 配列や動的な名前生成で柔軟なシート管理を実現。