データを整理して作業効率アップ
Excelでデータを管理していると、一覧表の情報をもとにシートを自動的に作成したくなる場面があります。
たとえば、顧客名簿があり、顧客ごとにシートを分けて管理したいときに、手作業でシートを作成するのは非常に時間がかかります。
そこでVBAを使えば、一覧表にある名前をもとに、自動でシートを作成して名前順に並べることができます。
名前順にシートを自動で作成する基本コード
まずは、基本的なコードを紹介します。
このコードは、シートに書かれた名前をもとに、新しいシートを作成し、名前順に並べ替えるものです。
基本コード
Sub CreateSheets()
Dim sourceWs As Worksheet
Dim lastRow As Long
Dim nameRange As Range
Dim nameCell As Range
Dim newSheet As Worksheet
Dim sheetName As String
' データがあるシートを設定
Set sourceWs = ThisWorkbook.Sheets("NameList")
' 最終行を取得
lastRow = sourceWs.Cells(sourceWs.Rows.Count, 1).End(xlUp).Row
' 名前が入っている範囲を設定(A列に名前があると仮定)
Set nameRange = sourceWs.Range(Cells(2,1),Cells(lastRow,1))
' 名前順に並べ替え
nameRange.Sort Key1:=nameRange, Order1:=xlAscending, Header:=xlNo
' 名前順にシートを作成
For Each nameCell In nameRange
sheetName = nameCell.Value
' 名前が空でない場合のみ処理
If sheetName <> "" Then
' 新しいシートを作成
Set newSheet = ThisWorkbook.Sheets.Add
newSheet.Name = sheetName
End If
Next nameCell
MsgBox "シートの作成が完了しました!"
End Sub
sourceWsは、シート名「NameList」として、名前一覧があるシートを指定します。nameRangeは、名前がリストされている範囲を指定します。ここではA列の2行目から最終行までを範囲として設定しています。nameRange.Sortで、名前を昇順に並べ替えています。For Eachループで、並べ替えられた名前を1つずつ取得し、その名前を使って新しいシートを作成します。- 新しいシートの名前は、リストにある名前をそのまま使っています。
応用:シートを作成する際の条件を追加する
基本的なコードが完成したら、少し応用してみましょう。
たとえば、シート名が既に存在する場合はスキップする、または、シートに何か特定のデータを入れるという処理を加えることができます。
応用コード(シート名が重複している場合を避ける)
Sub CreateSheetsByNameSimple()
Dim ws As Worksheet
Dim lastRow As Long
Dim nameRange As Range
Dim nameCell As Range
Dim newWs As Worksheet
Dim sName As String
' 名前一覧のあるシートを指定(例: NameList)
Set ws = ThisWorkbook.Sheets("NameList")
' 最終行を取得(A列に名前がある前提)
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' A列の名前範囲を指定(2行目〜最終行)
Set nameRange = ws.Range(ws.Cells(2, 1), ws.Cells(lastRow, 1))
' 名前順に並べ替え
nameRange.Sort Key1:=nameRange, Order1:=xlAscending, Header:=xlNo
' 名前ごとにシートを作成
For Each nameCell In nameRange
sName = Trim(nameCell.Value)
If sName <> "" Then
On Error Resume Next
Set newWs = ThisWorkbook.Sheets(sName)
On Error GoTo 0
' シートが存在しない場合だけ作成
If newWs Is Nothing Then
Set newWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
newWs.Name = sName
End If
' 次のループのために初期化
Set newWs = Nothing
End If
Next nameCell
MsgBox "名前順にシートを作成しました。"
End Sub
応用コードの説明
- ここでは、IF構文でシート名が既に存在するかどうかを確認しています。
- もし存在していた場合、その名前のシートはスキップされ、新たにシートが作成されることはありません。
実装するメリット
このように、VBAを使って名前順にシートを自動作成することには、次のようなメリットがあります。
メリット
- 作業の効率化
自分で手作業でシートを作成する必要がなくなり、数秒で自動化できます。 - ミスが減る
名前を手入力でシートに設定する際に発生しがちなミス(名前の重複や入力間違い)がなくなります。 - 一貫性を保つ
データを基にした自動生成なので、毎回同じフォーマットでシートが作成されます。 - データ整理が簡単になる
膨大なデータを月別、顧客別などで分ける作業も、VBAを使えば一瞬で完了します。
まとめ
今回紹介した「一覧表を名前順にシート自動作成する方法」を使うことで、面倒なシート作成作業を自動化することができます。
手動でデータを整理する時間を大幅に削減でき、業務効率化にも大いに役立ちます。
VBAを使いこなすことで、複雑なデータ処理がシンプルになり、作業ミスも減るので、ぜひこの方法を試してみてください。
