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って意外と細かく設定しないとデバックになるんよね
ではまたー
コメント