Excel

【VBA】worksheets.add(一番後ろ:after:name・名前:戻り値:新しいシートに出力・作成)

当サイトでは記事内に広告を含みます
いつも記事を読んでいただきありがとうございます!!! これからもお役に立てる各情報を発信していきますので、今後ともよろしくお願いします(^^)/

VBAでシートを新規作成する際に使用するのがWorksheets.Addメソッドです。

このメソッドを使いこなすことで、データの集計結果を新しいシートに出力したり、月次レポートを自動生成したり、テンプレートから作業用シートを作成するなど、様々な業務の自動化が可能になります。

Worksheets.Addメソッドには、シートの追加位置を指定する引数や、追加後のシート名を設定する方法、さらに戻り値を活用した効率的な処理など、押さえておくべきポイントが数多く存在します。

この記事では、Worksheets.Addメソッドの基本構文から、一番後ろへの追加方法、シート名の設定、戻り値の活用、新しいシートへのデータ出力まで、実践的なコード例を交えながら丁寧に解説していきます。

それでは見ていきましょう!

 

Worksheets.Addメソッドの基本構文と引数

それではまず、Worksheets.Addメソッドの基本構文と引数について解説していきます。

Addメソッドの基本的な構文

Worksheets.Addメソッドは、新しいシートをブックに追加するための基本的なメソッドです。構文は以下のようになります。

' 基本構文
Worksheets.Add Before:=位置, After:=位置, Count:=枚数

' 最もシンプルな使用例
Sub シート追加基本()
    ' 引数なしで実行すると、アクティブシートの前に追加される
    Worksheets.Add
    ActiveSheet.Name = "新規シート"
End Sub

引数を指定しない場合は、現在アクティブなシートの前に新しいシートが追加されます。

 

Before引数とAfter引数の使い方

Before引数とAfter引数は、新しいシートをどの位置に追加するかを指定します。

Sub Before引数の使用()
    ' 「集計」シートの前に新しいシートを追加
    Worksheets.Add Before:=Worksheets("集計")
    ActiveSheet.Name = "集計準備"
End Sub

Sub After引数の使用()
    ' 「データ」シートの後ろに新しいシートを追加
    Worksheets.Add After:=Worksheets("データ")
    ActiveSheet.Name = "データ分析"
End Sub

Sub インデックスでの指定()
    ' 1番目のシートの前に追加
    Worksheets.Add Before:=Worksheets(1)
    ActiveSheet.Name = "表紙"
End Sub
インデックス番号を使用すると、シート名が変更されても確実に位置を指定できます。特に1番目や最後といった固定位置への追加に便利です。

 

Count引数について

Count引数を使うと複数のシートを一度に追加できます。

Sub Count引数の使用()
    ' 3枚のシートを一度に追加
    Worksheets.Add Count:=3
    
    ' 最初に追加されたシートがアクティブになる
    ActiveSheet.Name = "シート1"
End Sub

Sub 複数シートを最後に追加()
    ' 現在の最後のシートの後ろに5枚追加
    Worksheets.Add After:=Worksheets(Worksheets.Count), Count:=5
    
    ' 各シートに連番を付ける
    Dim i As Integer
    Dim 開始位置 As Integer
    
    開始位置 = Worksheets.Count - 4
    
    For i = 0 To 4
        Worksheets(開始位置 + i).Name = "作業シート" & (i + 1)
    Next i
End Sub

 

シートを一番後ろに追加する方法

続いては、シートを一番後ろに追加する方法を確認していきます。

 

Afterを使って最後尾に追加

シートを一番後ろに追加するには、After引数とWorksheets.Countを組み合わせるのが一般的です。

Sub 最後尾に追加()
    ' ブックの最後にシートを追加
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    
    ' 追加したシートに名前を付ける
    ActiveSheet.Name = "最新データ"
End Sub

Sub 日付付きで最後尾に追加()
    ' 最後にシートを追加して日付を付ける
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    
    ' 今日の日付をシート名にする
    ActiveSheet.Name = Format(Date, "yyyy年mm月dd日")
    
    MsgBox "シート「" & ActiveSheet.Name & "」を追加しました", vbInformation
End Sub

この方法は、レポートを追加していく場合や、日次・月次で新しいシートを作成する場合に非常に便利です。

 

Worksheets.Countの活用

Worksheets.Countは、現在のブック内のシート数を返すプロパティで、最後尾への追加に欠かせません。

Sub シート数を確認して追加()
    Dim シート数 As Integer
    
    ' 現在のシート数を取得
    シート数 = Worksheets.Count
    
    ' 最後に新しいシートを追加
    Worksheets.Add After:=Worksheets(シート数)
    
    ' シート名に番号を付ける
    ActiveSheet.Name = "シート_" & Worksheets.Count
End Sub

Sub 条件付きでシート追加()
    ' シート数が10枚未満の場合のみ追加
    If Worksheets.Count < 10 Then
        Worksheets.Add After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = "追加シート_" & Worksheets.Count
        MsgBox "シートを追加しました", vbInformation
    Else
        MsgBox "シート数が上限に達しています", vbExclamation
    End If
End Sub

 

複数シートを一度に追加する

Count引数を組み合わせることで、複数のシートを一度に最後尾へ追加できます。

Sub 月別シートを一括作成()
    Dim 月 As Integer
    Dim 開始位置 As Integer
    
    ' 現在のシート数を記録
    開始位置 = Worksheets.Count
    
    ' 12ヶ月分のシートを追加
    Worksheets.Add After:=Worksheets(Worksheets.Count), Count:=12
    
    ' 各シートに月名を付ける
    For 月 = 1 To 12
        Worksheets(開始位置 + 月).Name = 月 & "月データ"
    Next 月
    
    MsgBox "1月から12月までのシートを作成しました", vbInformation
End Sub
Worksheets.Countを使うことで、常に確実にブックの最後にシートを追加できます。年間や四半期のシート作成にも応用できる重要なテクニックです。

 

追加したシートに名前を設定する

続いては、追加したシートに名前を設定する方法を確認していきます。

 

Nameプロパティでシート名を変更

追加したシートには、Nameプロパティを使って即座に名前を設定できます。

Sub シート名の基本設定()
    ' シートを追加
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    
    ' ActiveSheetで追加したシートにアクセス
    ActiveSheet.Name = "売上集計"
    
    ' セルに見出しを設定
    ActiveSheet.Range("A1").Value = "売上集計表"
    ActiveSheet.Range("A1").Font.Bold = True
End Sub

Sub 変数を使ったシート名設定()
    Dim 新シート名 As String
    
    新シート名 = "営業部_月次報告"
    
    ' シートを追加して名前を設定
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = 新シート名
    
    MsgBox "シート「" & 新シート名 & "」を作成しました", vbInformation
End Sub

 

日付や連番を含むシート名の設定

実務では、日付や連番を含むシート名を設定することが多くあります。

Sub 日付付きシート名()
    Dim シート名 As String
    
    ' 今日の日付を使ったシート名
    シート名 = "売上_" & Format(Date, "yyyymmdd")
    
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = シート名
End Sub

Sub 連番付きシート名()
    Dim 基本名 As String
    Dim 連番 As Integer
    
    基本名 = "分析結果"
    連番 = 1
    
    ' 既存のシート数から連番を決定
    Do While シート存在確認(基本名 & "_" & 連番)
        連番 = 連番 + 1
    Loop
    
    ' シートを追加
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = 基本名 & "_" & 連番
End Sub

' シート存在確認用の関数
Function シート存在確認(シート名 As String) As Boolean
    Dim ws As Worksheet
    
    On Error Resume Next
    Set ws = Worksheets(シート名)
    シート存在確認 = Not ws Is Nothing
    On Error GoTo 0
End Function

 

シート名の重複を回避する方法

シート名が重複するとエラーが発生するため、事前にチェックして重複を回避する処理が重要です。

Sub 重複回避_タイムスタンプ()
    Dim シート名 As String
    
    ' 秒単位のタイムスタンプで確実にユニークな名前を作成
    シート名 = "データ_" & Format(Now, "yyyymmdd_hhnnss")
    
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = シート名
End Sub

Sub 重複時の上書き確認()
    Dim シート名 As String
    
    シート名 = "月次集計"
    
    ' シートが既に存在するかチェック
    If シート存在確認(シート名) Then
        ' 既存シートを削除
        Application.DisplayAlerts = False
        Worksheets(シート名).Delete
        Application.DisplayAlerts = True
    End If
    
    ' 新しいシートを作成
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = シート名
End Sub
タイムスタンプは秒単位まで含めることで、ほぼ確実にユニークな名前を生成でき、シート名の重複エラーを防ぐことができます。

 

Addメソッドの戻り値を活用する

続いては、Addメソッドの戻り値を活用する方法を確認していきます。

 

戻り値でシートオブジェクトを取得

Worksheets.Addメソッドは、追加したシートのオブジェクトを戻り値として返します。これを変数に格納することで効率的な処理が可能です。

Sub 戻り値の基本的な使い方()
    Dim 新シート As Worksheet
    
    ' Addメソッドの戻り値を変数に格納
    Set 新シート = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    
    ' 変数を通じてシートを操作
    With 新シート
        .Name = "集計結果"
        .Range("A1").Value = "項目"
        .Range("B1").Value = "金額"
        .Range("A1:B1").Font.Bold = True
    End With
    
    MsgBox "シート「" & 新シート.Name & "」を作成しました", vbInformation
End Sub
戻り値を変数に格納する方法は、ActiveSheetを使うよりも確実で、他のシートがアクティブになっても影響を受けません。複雑な処理では必須のテクニックです。

 

Set文を使った効率的な処理

Set文で戻り値を受け取ることで、より効率的で読みやすいコードが書けます。

Sub Set文を使った処理()
    Dim 集計シート As Worksheet
    Dim データ As Variant
    Dim i As Integer
    
    ' 新しいシートを作成して変数に格納
    Set 集計シート = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    集計シート.Name = "集計_" & Format(Date, "yyyymmdd")
    
    ' データを配列で用意
    データ = Array("リンゴ", "キウイ", "パパイヤ", "マンゴー")
    
    ' 変数を使ってデータを書き込む
    With 集計シート
        .Range("A1").Value = "商品名"
        .Range("B1").Value = "売上"
        
        ' データをループで書き込み
        For i = 0 To UBound(データ)
            .Cells(i + 2, 1).Value = データ(i)
            .Cells(i + 2, 2).Value = Int(Rnd * 100) + 1
        Next i
        
        .Range("A1:B1").Font.Bold = True
        .Columns("A:B").AutoFit
    End With
End Sub

 

複数シート追加時の戻り値の扱い

複数シートを一度に追加した場合、戻り値は最初に追加されたシートのオブジェクトを返します。

Sub 複数シート追加の戻り値()
    Dim 最初のシート As Worksheet
    Dim i As Integer
    
    ' 3枚のシートを追加(戻り値は最初のシート)
    Set 最初のシート = Worksheets.Add(After:=Worksheets(Worksheets.Count), Count:=3)
    
    ' 最初のシートの位置から各シートに名前を付ける
    For i = 0 To 2
        Worksheets(最初のシート.Index + i).Name = "第" & (i + 1) & "四半期"
    Next i
End Sub

 

新しいシートにデータを出力する実践例

続いては、新しいシートにデータを出力する実践例を確認していきます。

 

集計結果を新規シートに出力

集計処理の結果を新しいシートに出力することは、実務で最も多く使われるパターンです。

Sub 集計結果を出力()
    Dim 結果シート As Worksheet
    
    ' 新しい集計シートを作成
    Set 結果シート = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    結果シート.Name = "集計結果_" & Format(Date, "yyyymmdd")
    
    ' ヘッダーを設定
    With 結果シート
        .Range("A1").Value = "商品名"
        .Range("B1").Value = "売上合計"
        .Range("A1:B1").Font.Bold = True
        .Range("A1:B1").Interior.Color = RGB(200, 230, 255)
        
        ' サンプルデータを出力
        .Range("A2").Value = "ドリアン"
        .Range("B2").Value = 150000
        .Range("A3").Value = "ライチ"
        .Range("B3").Value = 98000
        
        .Columns("A:B").AutoFit
    End With
    
    MsgBox "集計結果を出力しました", vbInformation
End Sub

 

配列データを新規シートに書き込む

配列に格納したデータを、新規シートに一括で書き込む方法です。

Sub 配列データを出力()
    Dim 出力シート As Worksheet
    Dim データ配列 As Variant
    Dim i As Long
    
    ' データを配列で準備
    データ配列 = Array( _
        Array("商品", "単価", "数量"), _
        Array("アボカド", 200, 50), _
        Array("グアバ", 150, 30), _
        Array("スターフルーツ", 300, 20) _
    )
    
    ' 新規シートを作成
    Set 出力シート = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    出力シート.Name = "商品データ"
    
    ' 配列データをシートに出力
    For i = 0 To UBound(データ配列)
        出力シート.Cells(i + 1, 1).Resize(1, 3).Value = データ配列(i)
    Next i
    
    ' 書式設定
    出力シート.Range("A1:C1").Font.Bold = True
    出力シート.Columns("A:C").AutoFit
End Sub

 

レポート形式で新規シートを作成

レポート形式で整ったシートを作成する例です。

Sub レポート形式で作成()
    Dim レポートシート As Worksheet
    
    ' 新規シートを作成
    Set レポートシート = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    レポートシート.Name = "月次レポート_" & Format(Date, "yyyymm")
    
    ' レポートの作成
    With レポートシート
        ' タイトル
        .Range("A1").Value = "月次売上レポート"
        .Range("A1").Font.Size = 16
        .Range("A1").Font.Bold = True
        
        ' 作成日
        .Range("A2").Value = "作成日: " & Format(Date, "yyyy年mm月dd日")
        
        ' ヘッダー
        .Range("A4").Value = "区分"
        .Range("B4").Value = "金額"
        .Range("A4:B4").Font.Bold = True
        .Range("A4:B4").Interior.Color = RGB(220, 220, 220)
        
        ' データ
        .Range("A5").Value = "売上高"
        .Range("B5").Value = 1500000
        .Range("A6").Value = "経費"
        .Range("B6").Value = 450000
        
        ' 書式調整
        .Columns("A:B").AutoFit
        .Range("B5:B6").NumberFormat = "#,##0"
    End With
    
    MsgBox "レポートを作成しました", vbInformation
End Sub
レポート形式でシートを作成する場合、Withステートメントを使うことでコードが読みやすく、処理も効率的になります。

 

よくあるエラーと対処法

続いては、よくあるエラーと対処法を確認していきます。

 

シート数の上限エラー

Excelにはシート数の上限(255枚)があり、それを超えるとエラーになります。

Sub シート数上限チェック()
    ' シート追加前に上限をチェック
    If Worksheets.Count >= 255 Then
        MsgBox "シート数が上限に達しています", vbCritical
        Exit Sub
    End If
    
    ' 問題なければシート追加
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = "新規シート"
End Sub

 

シート名の重複エラー

同じ名前のシートが既に存在するとエラーが発生します。

Sub 重複エラー対処()
    Dim シート名 As String
    
    シート名 = "データ"
    
    ' エラー処理を設定
    On Error Resume Next
    
    ' シートを追加して名前を設定
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = シート名
    
    ' エラーが発生した場合
    If Err.Number <> 0 Then
        ' タイムスタンプを付けて再試行
        ActiveSheet.Name = シート名 & "_" & Format(Now, "hhnnss")
        MsgBox "シート名が重複したため、タイムスタンプを付けました", vbInformation
    End If
    
    On Error GoTo 0
End Sub

 

オブジェクト変数のエラー

Set文を使わずにオブジェクトを代入するとエラーが発生します。

Sub オブジェクト変数の正しい使い方()
    Dim 新シート As Worksheet
    
    ' 正しい方法: Setを使用
    Set 新シート = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    新シート.Name = "正しい方法"
    
    ' 誤った方法(エラーになる)
    ' 新シート = Worksheets.Add(After:=Worksheets(Worksheets.Count))
End Sub
オブジェクト型の変数に値を代入する際は、必ずSet文を使用する必要があります。これはVBAの基本ルールです。

 

まとめ 【VBA】新しいシートを作成、worksheets.add(after:名前:戻り値:)

本記事では、VBAのWorksheets.Addメソッドについて、基本的な使い方から実践的な応用テクニックまで詳しく解説してきました。

Worksheets.Addメソッドは、After引数とWorksheets.Countを組み合わせることで一番後ろにシートを追加でき、戻り値を活用することでより効率的な処理が可能になります。

シート名の設定では、日付やタイムスタンプを利用することで重複エラーを回避でき、新規シートへのデータ出力では、配列やループを活用することで大量のデータも効率的に処理できます。

実務では、シート数の上限チェックやエラー処理を適切に実装することで、安定したマクロを作成できます。本記事で紹介したコード例を参考に、ぜひご自身の業務に合わせたシート作成処理を実装してみてください。