説明
- ブック名とシート名を引数に与える。
- 指定したブックに同じ名前のシートが存在した場合には,メッセージボックスで上書きするかを確認。
- 「はい」の場合 → 同名のシートを消去してそのシート名を返す。
- 「いいえ」の場合 → シート名の後ろに(1)からの引数を加え,名前被りがないかチェック。自動で名前被りのない引数に調整しそのシート名を返す。
例
ブック「book1.xlsx」にシート「sheet1」と「sheet1(1)」が存在するとき,引数にブック名「book1.xlsx」,シート名「sheet1」を渡した場合。
メッセージボックスの上書き確認
1. 「はい」を選択 → シート名「sheet1」が返される。
2. 「いいえ」を選択 → シート名「sheet1(2)」が返される。
コード
Function CheckName(BookName, SheetName) As String
'宣言
Dim ws As Worksheet
Dim flag As Boolean: flag = False
Dim flag2 As Boolean: flag2 = True
Dim btn As Long
Dim tmpName As String
'同じ名前のシートがないかチェック
For Each ws In Workbooks(BookName).Worksheets
If ws.name = SheetName Then flag = True
Next ws
'同じ名前のシートが存在した場合
If flag = True Then
btn = MsgBox("既に出力シートが存在します。上書きしますか?" & vbCr & _
"(「いいえ」を選択した場合は別名のシートに出力します)", vbYesNo + vbQuestion)
'「はい」を選択
If btn = vbYes Then
Application.DisplayAlerts = False
Workbooks(BookName).Worksheets(SheetName).Delete
Application.DisplayAlerts = True
'「いいえ」を選択
Else
Dim i As Long: i = 1
Do While flag2 = True
flag2 = False
tmpName = SheetName & "(" & i & ")"
For Each ws In Worksheets
If ws.name = tmpName Then flag2 = True
Next ws
i = i + 1
Loop
SheetName = tmpName
End If
End If
'シート名を返す
CheckName = SheetName
End Function