一瞬でExcelワークシートを一括作成するマクロのご紹介
日々の業務でExcelを使用している方に、時短マクロをご紹介します!セル範囲を指定するだけで、その範囲の名前を持つワークシートを一括で作成することができるマクロです。これを利用すれば、複数のシート名を手動で一つ一つ作成する手間が大幅に省けます。
このマクロの主な機能
- 指定したセル範囲の値をワークシート名として新しいシートを一括作成。
- シート名として使用できない文字や、既に存在するシート名、長すぎる名前などを事前にチェックし、エラーメッセージを表示。
- 実行後、もともとの選択範囲へ自動的に戻る。
VBAコード
以下のコードをVBE(Altキー+F11キーで起動)の標準モジュールへ貼り付けてください(挿入→標準モジュール)。
Sub CreateWorksheetsFromRange() Dim targetRange As Range, originalSelection As Range Dim cell As Range, cellCheck As Range Dim ws As Worksheet Dim sheetName As String Dim sheetExists As Boolean Dim invalidChars As String Dim char As String Dim i As Integer ' 既定値を現在選択されている範囲に設定 Set originalSelection = Selection On Error Resume Next Set targetRange = Application.InputBox("シート名としたい値が入力されている範囲を選択してください", Type:=8, Default:=Selection.Address) On Error GoTo 0 ' キャンセルした場合の処理 If targetRange Is Nothing Then originalSelection.Worksheet.Select Exit Sub End If invalidChars = "\/*[]:?" ' まず、全てのセルの値を検証する For Each cell In targetRange sheetName = Trim(cell.Value) ' 空白セルをスキップ If sheetName = "" Then GoTo NextCell End If sheetExists = False ' 使用できない文字をチェック For i = 1 To Len(invalidChars) char = Mid(invalidChars, i, 1) If InStr(sheetName, char) > 0 Then MsgBox "エラー: シート名'" & sheetName & "'に使用できない文字'" & char & "'が含まれています。", vbCritical originalSelection.Worksheet.Select Exit Sub End If Next i ' 文字数制限をチェック If Len(sheetName) > 31 Then MsgBox "エラー: シート名'" & sheetName & "'が31文字を超えています。", vbCritical originalSelection.Worksheet.Select Exit Sub End If ' 一意性をチェック(既存のシートとの比較) For Each ws In ThisWorkbook.Worksheets If LCase(ws.Name) = LCase(sheetName) Then sheetExists = True Exit For End If Next ws If sheetExists Then MsgBox "エラー: シート名'" & sheetName & "'は既に存在します。", vbCritical originalSelection.Worksheet.Select Exit Sub End If ' 一意性をチェック(選択範囲内のデータとの比較) For Each cellCheck In targetRange If cell.Address <> cellCheck.Address And LCase(Trim(cell.Value)) = LCase(Trim(cellCheck.Value)) And Trim(cellCheck.Value) <> "" Then MsgBox "エラー: シート名'" & sheetName & "'が選択範囲内で重複しています。", vbCritical originalSelection.Worksheet.Select Exit Sub End If Next cellCheck NextCell: Next cell ' シート名の検証が成功したので、ワークシートを作成する For Each cell In targetRange sheetName = Trim(cell.Value) ' 空白セルをスキップ If sheetName = "" Then GoTo SkipCreation End If On Error GoTo ErrorHandler ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)).Name = sheetName On Error GoTo 0 SkipCreation: Next cell originalSelection.Worksheet.Select Exit Sub ErrorHandler: MsgBox "エラー: シート'" & cell.Value & "'の作成中に予期しないエラーが発生しました。", vbCritical originalSelection.Worksheet.Select End Sub
マクロ実行時の手順
- マクロをExcelにインポートします(標準モジュールへ挿入)。
- Excel内で、新しいワークシート名として使用したい名前を入力した範囲を選択します。
CreateWorksheetsFromRange
マクロを実行します(Altキー+F8キーでマクロリストが表示されます)。するとインプットボックスが表示されます。この時点で既に範囲が選択されていれば、その範囲が既定値として設定されています。- 「OK」をクリックすると、マクロが指定した範囲の名前を元にワークシートを一括で作成します。
注意点
- シート名に使用できない文字(\, /, *, [, ], :, ? など)や31文字を超える名前は、事前にエラーチェックされます。
- 既に存在するシート名や、選択範囲内での重複した名前についても、事前にエラーチェックされます。
- エラーが発生した場合、その時点でマクロは中断され、エラーの内容がメッセージボックスで表示されます。
このマクロを活用して、日々のExcel作業をさらに効率的に進めてください!
コメント