[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シート名が重複した場合連番を付けエラー回避したい』(PK)
特定のセルの内容をシート名にしたく、以下のVBAを使用していますが
セルの内容が重複した場合エラーになってしまいます。
重複する場合には連番を振りエラーを回避したいのですが
どのような文を追記すれば良いのでしょうか?
宜しくお願い致します。
Sub セルをシート名にする()
Dim msheet As Worksheet For Each msheet In Worksheets msheet.Name = msheet.Range("A2").Value Next End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
[[20201105155840]] 『マクロ 新しいシートを作って同じ名前なら後ろに』(はぁ〜と)
(OK) 2020/11/13(金) 18:44
ありがとうございます。
ご案内いただいたログを確認しました。
この方は以下で稼働したとのことですが、
どこでセルの値を指定すれば良いのでしょうか?
初心者で理解が難しいためお手数ですが再度ご教示ください。
Sub ChangeSheetName(WS As Worksheet, ByVal newName As String) Dim i As Integer, n As Integer Dim oWS As Worksheet n = 1 On Error GoTo Err_NewName WS.Name = newName On Error GoTo 0 Exit Sub Err_NewName: If n > 99 Then Err.Raise Err.Number, , Err.Description Set oWS = WS.Parent.Worksheets(newName) If oWS.Name Like "*(?)" Or WS.Name Like "*(??)" Then i = InStrRev(oWS.Name, "(") n = Val(Mid(oWS.Name, i + 1)) + 1 newName = Left(oWS.Name, i) & n & ")" Else n = n + 1 newName = newName & Format(n, "(0)") End If Resume End Sub
(PK) 2020/11/13(金) 19:02
Sub セルをシート名にする()
Dim msheet As Worksheet Dim ws As Worksheet Dim n As String 'シート名用文字列 Dim n2 As String '連番文字 Dim i As Long '連番用
For Each msheet In Worksheets '変数の初期化 n = msheet.Range("A2").Value n2 = ""
'仮に変数に名前を指定してシートを代入してみる 'もしあればすんなり代入されなければ(エラーで無視される)Nothingのまま On Error Resume Next Set ws = Worksheets(n) On Error GoTo 0
'変数wsにシートが代入されなくなるまで繰り返し Do Until ws Is Nothing i = i + 1 '連番カウントアップ n2 = "(" & i & ")" '連番文字生成
'シート名に連番を付けて変数に代入してみる Set ws = Nothing On Error Resume Next Set ws = Worksheets(n & n2) On Error GoTo 0 Loop
msheet.Name = n & n2 Next End Sub
シート名を事前に関係ない名前にマクロで変更しておいた方がよいかも知れません。
何回も実行すると、ころころシート名が変わるので。
(まっつわん) 2020/11/13(金) 19:46
他のプロシージャから下のようにして呼んで使います。
Sub test() Dim ws As Worksheet For Each ws In Worksheets ChangeSheetName ws, ws.Range("b4").Value Next ws End Sub (OK) 2020/11/13(金) 20:19
PKさんの元のコードに組み込むとこんな感じです。
Sub セルをシート名にする2()
Dim msheet As Worksheet For Each msheet In Worksheets 'msheet.Name = msheet.Range("A2").Value ChangeSheetName msheet, msheet.Range("A2").Value Next End Sub (OK) 2020/11/13(金) 20:21
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.