【Excelマクロ】一覧表を「名前順」にシート自動作成

データを整理して作業効率アップ

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を使いこなすことで、複雑なデータ処理がシンプルになり、作業ミスも減るので、ぜひこの方法を試してみてください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール