【VBA】シート名の入力と重複チェック

VBA

Excel VBAを使用して新しいシートを作成するとき、ユーザーにシート名を入力させ、そのシート名が既存のシート名と重複しないようにすることが重要です。今回は、ユーザーが入力したシート名が既存のシート名と重複していないかを確認し、問題がなければそのシートに名前を付けるVBAマクロを紹介します。また、キャンセルが押された場合の処理も行います。

コードの概要

以下は、シート名の入力を求め、シート名の重複チェックを行い、問題がなければシート名を設定するマクロです。

Sub RenameSheetWithValidation()
    Dim SheetName As String
    Dim CheckFlag As Boolean
    Dim SheetFlag As Boolean
    Dim WS As Integer

    ' シート名が有効になるまでループを続ける
    Do While CheckFlag = False
        ' シート名の入力を求める
        SheetName = InputBox("シート名を入力してください")

        ' キャンセルが押された場合の処理
        If StrPtr(SheetName) = 0 Then ' キャンセル時には戻り値が "0" となる
            MsgBox "キャンセルされました"
            Application.DisplayAlerts = False
            ActiveSheet.Delete
            Application.DisplayAlerts = True
            Exit Sub
        Else
            ' シート名が空の場合の処理
            If SheetName = "" Then
                MsgBox "シート名の入力は必須です", vbExclamation
            Else
                ' シート名の重複チェック
                SheetFlag = False
                For WS = 1 To Sheets.Count
                    If Sheets(WS).Name = SheetName Then
                        MsgBox "このシート名は既に存在しています", vbExclamation
                        SheetFlag = True
                    End If
                Next

                ' 重複がなければシート名を設定
                If SheetFlag = False Then
                    ActiveSheet.Name = SheetName
                    CheckFlag = True
                End If
            End If
        End If
    Loop
End Sub

コードの詳細解説

1. シート名の入力を求める

SheetName = InputBox("シート名を入力してください")

この部分では、InputBox を使用してユーザーにシート名の入力を求めます。InputBox はユーザーに対話的にデータを入力させるための便利な関数です。

2. キャンセルが押された場合の処理

If StrPtr(SheetName) = 0 Then
    MsgBox "キャンセルされました"
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
    Exit Sub
End If

StrPtr(SheetName) = 0 は、ユーザーが InputBox でキャンセルを押した場合に戻り値が 0 になることを利用しています。キャンセルが押された場合は、メッセージを表示し、現在のシートを削除してマクロを終了します。

3. シート名が空白の場合の処理

If SheetName = "" Then
    MsgBox "シート名の入力は必須です", vbExclamation

シート名が空白であった場合、警告メッセージを表示し、再度シート名の入力を求めます。

4. シート名の重複チェック

For WS = 1 To Sheets.Count
    If Sheets(WS).Name = SheetName Then
        MsgBox "このシート名は既に存在しています", vbExclamation
        SheetFlag = True
    End If
Next

シート名が既存のシートと重複していないかを確認するため、すべてのシート名と入力されたシート名を比較します。重複が見つかった場合、再度シート名の入力を求めます。

5. シート名の設定

If SheetFlag = False Then
    ActiveSheet.Name = SheetName
    CheckFlag = True
End If

シート名が重複していない場合にのみ、入力されたシート名を現在のシートに設定し、ループを終了します。

コードのカスタマイズ

このマクロは、他の用途にも応用できるようにカスタマイズが可能です。例えば、新しいシートを追加する際にこのマクロを使用したり、特定のシートに名前を付ける際に使用したりすることができます。

まとめ

このマクロを使用すれば、ユーザーが入力したシート名の重複を防ぎ、確実に新しいシートにユニークな名前を付けることができます。また、キャンセル処理や空白チェックも含まれているため、エラーを防ぐことができます。ぜひ、あなたのプロジェクトで活用してみてください。


人間何するか分からんからInputboxって意外と細かく設定しないとデバックになるんよね

ではまたー

コメント

タイトルとURLをコピーしました