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コードを使えば、データの整理や管理が格段に効率化できます。ぜひ、ご自身の作業に活用してみてください。