コメントで述べたように、シートの名前を変更するのはそれほど簡単ではありません。いろいろチェックしないといけない。
私の仮定
- ワークブックには 5 つのシートがあります。
Sheet1
、Sheet2
、Sheet3
、Sheet4
およびSheet5
- でセルを変更すると、変更
Sheet5
するセルによってSheets1-4's
名前が変わる
A1
変更すると、名前が変更されると想定していSheet1
ます。A2
変更時、名前が変更されたときSheet2
など...
論理
Worksheet_Change
イベントを使用してセルA1
、A2
、A3
またはへの変更をトラップするA4
- Sheet CodeName を使用して名前を変更します
- シート名が有効かどうかを確認してください。シート名にこれらの文字を含めることはできません
\ / * ? [ ]
- 名前の変更に使用する名前のシートが既にあるかどうかを確認します
- すべてがハンキードーリーの場合は、先に進んで交換してください
コード
この例を参照してください。このコードはSheet5
コード領域に入ります。
Dim sMsg As String
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wsName As String
On Error GoTo Whoa
sMsg = "Success"
Application.EnableEvents = False
If Not Target.Cells.CountLarge > 1 Then
If Not Intersect(Target, Range("A1")) Is Nothing Then
wsName = Left(Target, 31)
RenameSheet [Sheet1], wsName
ElseIf Not Intersect(Target, Range("A2")) Is Nothing Then
wsName = Left(Target, 31)
RenameSheet [Sheet2], wsName
ElseIf Not Intersect(Target, Range("A3")) Is Nothing Then
wsName = Left(Target, 31)
RenameSheet [Sheet3], wsName
ElseIf Not Intersect(Target, Range("A4")) Is Nothing Then
wsName = Left(Target, 31)
RenameSheet [Sheet4], wsName
End If
End If
MsgBox sMsg
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
'~~> Procedure actually renames the sheet
Sub RenameSheet(ws As Worksheet, sName As String)
If IsNameValid(sName) Then
If sheetExists(sName) = False Then
ws.Name = sName
Else
sMsg = "Sheet Name already exists. Please check the data"
End If
Else
sMsg = "Invalid sheet name"
End If
End Sub
'~~> Check if sheet name is valid
Function IsNameValid(sWsn As String) As Boolean
IsNameValid = True
'~~> A sheet name cannot contain any of these Characters \ / * ? [ ]
For i = 1 To Len(sWsn)
Select Case Mid(sWsn, i, 1)
Case "\", "/", "*", "?", "[", "]"
IsNameValid = False
Exit For
End Select
Next
End Function
'~~> Check if the sheet exists
Function sheetExists(sWsn As String) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Sheets(sWsn)
On Error GoTo 0
If Not ws Is Nothing Then sheetExists = True
End Function
スクリーンショット
