- VBAでデータの種類・項目ごとにシートを追加するにはどうすればいい?
- 追加したシートの名前はデータに合わせて変えたい
- コピペで作業できるようにしてほしい
多くのExcel作業を自動化できるExcelVBAですが、基本的な作業は簡単にコピペで実現できるといいですよね。
そこで、この記事ではExcelVBAで「データの種類ごとにシートを追加し、シート名をデータに合わせて変更するコード」をコピペできるように紹介します。
ここでいう「データの種類」とは、どんな種類のデータでも対応可能です。
商品のグループや顧客のグループはもちろん、性別や年齢層などといったデータでもOK。
それぞれのデータ種類ごとに、新しいシートを追加するVBAのサンプルコードをまとめました。
この記事に掲載しているサンプルコードは、そのままコピペすることで利用可能です。
ご参考までに、それではどうぞ!
目次
データの種類ごとに新しいシートを追加して名前を変更する
'データの数だけループ処理 Dim i As Long Dim flg As Boolean Dim trgtShName As String For i = 1 To 4 flg = False trgtShName = ThisWorkbook.Worksheets("DATA").Cells(i, 1).Value 'すでに同名のシートがあるかどうか判定 Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If ws.Name = trgtShName Then flg = True Exit For End If Next ws If flg = False Then '現在あるワークシートの枚数をカウントして、その後ろ(末尾)に新しいシートを作成する Worksheets.Add After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) '追加したシートはActiveになるため「ActiveSheet」で指定し名前を変更する ActiveSheet.Name = trgtShName End If Next i
▼実行前
▼実行後
スポンサードリンク
データの種類ごとに新しいシートを追加して名前を変更するコードの解説
どんな処理をしているのかもう少し詳しく解説してくれ!
…という方のために、もう少し詳しく解説していきますね。
今回のコードでは画像のようにデータ順にシートが追加されていきます。
これらの処理は少々複雑ですので、順々にコードを解説していきます。
繰り返し処理「For Next」
はじめに、今回の処理でメインとなる「For Next」について解説します。
重要になるソースは以下の通りです。
'データの数だけループ処理 Dim i As Long Dim flg As Boolean Dim trgtShName As String For i = 1 To 4 ~~~ trgtShName = ThisWorkbook.Worksheets("DATA").Cells(i, 1).Value 'すでに同名のシートがあるかどうか判定 ~~~ Next i
ポイントは、上記の「シートからデータを取得する」処理です。
「For Next」では、カウンターに設定した変数がループするごとに変化していきます。ここでは変数「i」がカウンターとなっており「1 To 4」つまり「1」から「4」まで変化していきます。
つまり、画像のセルから順番にデータを取得することになります。
- ThisWorkbook.Worksheets("DATA").Cells(1, 1)
- ThisWorkbook.Worksheets("DATA").Cells(2, 1)
- ThisWorkbook.Worksheets("DATA").Cells(3, 1)
- ThisWorkbook.Worksheets("DATA").Cells(4, 1)
こうして取得したデータを変数「trgtShName」に定義し、シートを追加、名前を変更する処理を繰り返しています。
繰り返し処理「For Each」
続いても繰り返し処理ですが少し違った書き方となります。
Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If ws.Name = trgtShName Then flg = True Exit For End If Next ws
「For Each」は指定した範囲内の全ての要素に対して処理を行います。
ここでは「ThisWorkbook.Worksheets」内の全ワークシート「ws」に対して処理を行っています。
そして、シートの名前「ws.Name」が「For Next」で取得した「trgtShName」と同じであったら「flg = True」として「Exit For」で繰り返し処理を抜けています。
この処理で、コピーしようとしているデータ名のシートがすでにワークブック内に存在しているかどうかを確認することができます。
この判定をいれずシート名の重複を確認しないと、同一のデータがあった場合、画像のエラーが出てマクロが止まってしまうので注意しましょう。
シートの数取得「ThisWorkbook.Worksheets.Count」
最後にシートを追加する部分で使われている「ThisWorkbook.Worksheets.Count」について解説します。
Worksheets.Add After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) '追加したシートはActiveになるため「ActiveSheet」で指定し名前を変更する ActiveSheet.Name = trgtShName
ここでは処理実行時点でワークブック内にいくつワークシートがあるかを確認しています。例えば画像の状態なら「ThisWorkbook.Worksheets.Count」は「2」となります。
つまり「ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)」で、一番右(末尾)のシートを取得することができます。
取得したシートを「Worksheets.Add」の位置指定「After」に指定することで、新しいシートを末尾に追加しています。
また、追加直後のシートは「ActiveSheet」で取得できるので、事前に取得した「trgtShName」にシート名を変更しています。
以上、コピペでできるExcelVBAでの「データごとにシートを追加し、シート名をデータに合わせて変更する」方法の紹介でした。
コード内で解説した繰り返し処理やシート数を数える処理もコピペでできますので、試してみてください。