Excelについて詳しく解説します
- ExcelVBAでデータごとに新しいシートを自動作成したい
- シート名をデータに合わせて自動設定したい
- 簡単にコピペで利用できるVBAコードが欲しい
- シートの作成位置やエラー処理も考慮したい
ExcelVBAを使えば、データの種類ごとに新しいシートを自動で追加し、効率的なデータ管理が可能になります。
この記事では、データの種類に応じて「自動的に新しいシートを追加し、シート名を設定するVBAコード」を、コピペですぐに使える形でご紹介します。
記事の内容は2024年11月時点のものとなります。
目次
この記事のポイント!
- データ項目ごとに新しいシートを自動作成できる
- シート名の重複チェックでエラーを防止
- コピペですぐに使えるVBAコード付き
データの種類ごとに新しいシートを作成するVBAコード
まずは、コピペですぐに使えるVBAコードをご紹介します。
'データの種類ごとにシートを追加するマクロ
Sub AddSheetsByCategory()
'変数の宣言
Dim i As Long
Dim flg As Boolean
Dim targetSheetName As String
'重複確認用の変数
Dim ws As Worksheet
'エラー処理
On Error Resume Next
'データの数だけループ処理
For i = 1 To 4
flg = False
'データシートからシート名を取得
targetSheetName = ThisWorkbook.Worksheets("DATA").Cells(i, 1).Value
'シート名の重複チェック
For Each ws In ThisWorkbook.Worksheets
If ws.Name = targetSheetName Then
flg = True
Exit For
End If
Next ws
'重複していない場合のみシートを追加
If flg = False Then
'末尾に新規シートを追加
Worksheets.Add After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
'追加したシートの名前を設定
ActiveSheet.Name = targetSheetName
End If
Next i
MsgBox "シートの作成が完了しました。", vbInformation
End Sub
このVBAコードは、以下のような場面で活用できます:
- 商品カテゴリごとにデータを整理したい
- 部署別・支社別にシートを分けたい
- 顧客グループごとにデータを管理したい
- 月次・年次データを別シートで管理したい
実行結果の確認
▼実行前の状態

▼実行後の状態

VBAコードの詳細解説
今回のVBAコードを、重要なポイントごとに詳しく解説していきます。
変数の宣言とエラー処理
'変数の宣言 Dim i As Long '繰り返し処理用のカウンター Dim flg As Boolean 'シート名重複チェック用のフラグ Dim targetSheetName As String 'シート名格納用の変数 Dim ws As Worksheet 'ワークシート参照用の変数 'エラー処理 On Error Resume Next
「On Error Resume Next」でエラーが発生しても処理を継続できるようにしています。
- Long型:大きな数値を扱える整数型の変数
- Boolean型:True/Falseを格納できる論理型の変数
- String型:文字列を格納できる変数
- Worksheet型:Excelのワークシートを参照できる変数
データの読み取りとループ処理
'データの数だけループ処理
For i = 1 To 4
flg = False '重複フラグを初期化
'データシートからシート名を取得
targetSheetName = ThisWorkbook.Worksheets("DATA").Cells(i, 1).Value
ThisWorkbook.Worksheets("DATA")は現在開いているブックの「DATA」シートを指定します。
Cells(i, 1)はA列の各行を順番に参照します:
- i = 1の時:A1セル
- i = 2の時:A2セル
- i = 3の時:A3セル
- i = 4の時:A4セル
シート名の重複チェック処理
'シート名の重複チェック
For Each ws In ThisWorkbook.Worksheets
If ws.Name = targetSheetName Then
flg = True
Exit For
End If
Next ws
For Eachループを使って、ワークブック内の全シートとの重複をチェックします。
- 既存の各シートの名前と比較
- 一致するシート名があればflgをTrueに設定
- Exit Forで重複が見つかった時点でループを抜ける
新規シートの追加処理
'重複していない場合のみシートを追加
If flg = False Then
'末尾に新規シートを追加
Worksheets.Add After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
'追加したシートの名前を設定
ActiveSheet.Name = targetSheetName
End If
重複チェックをパスした場合のみ、新しいシートを追加します。
- ThisWorkbook.Worksheets.Count:現在のシート数を取得
- Worksheets.Add After:指定位置の後ろにシートを追加
- ActiveSheet:直前に追加したシートを参照
完了メッセージの表示
MsgBox "シートの作成が完了しました。", vbInformation
処理完了時に確認メッセージを表示することで、ユーザーに実行完了を通知します。
データからシート名を取得する処理
「For Next」構文を使って、データの数だけ処理を繰り返します。
For i = 1 To 4
flg = False
targetSheetName = ThisWorkbook.Worksheets("DATA").Cells(i, 1).Value
'以下処理続く
Next i
この部分では、「DATA」シートのA列から順番にデータを読み取ります。

- 1回目のループ:A1セルの値を取得
- 2回目のループ:A2セルの値を取得
- 3回目のループ:A3セルの値を取得
- 4回目のループ:A4セルの値を取得
シート名の重複チェック処理
既存のシートと名前が重複していないかをチェックします。
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name = targetSheetName Then
flg = True
Exit For
End If
Next ws
シート名が重複していると以下のようなエラーが発生するため、この重複チェックが重要になります。
同一データがあった場合、下記の画像のようなエラーが起きるので、注意しましょう。
新規シートの追加処理
重複がない場合のみ、新しいシートを追加します:
If flg = False Then
Worksheets.Add After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
ActiveSheet.Name = targetSheetName
End If
「ThisWorkbook.Worksheets.Count」で現在のシート数を取得し、末尾に新しいシートを追加します。
まとめ
この記事のポイント!
- データ項目ごとに新しいシートを自動作成できる
- シート名の重複チェックでエラーを防止
- コピペですぐに使えるVBAコード付き
以上、ExcelVBAでデータの種類ごとに新しいシートを作成する方法をご紹介しました。
このVBAコードを使えば、データの整理や管理が格段に効率化できます。ぜひ、ご自身の作業に活用してみてください。















