dポイントプレゼントキャンペーン実施中!

Dim ws As Worksheet
Dim i As Long
For i = 1 To ThisWorkbook.Sheets.Count
For Each ws In ThisWorkbook.Sheets
If ws.name Like "*T*" Then
ws.name = Replace(ws.name, "T", "S")
End If
Next
Next
End Sub

この処理をするとnameメソッド失敗worksheetオブジェクト
処理できるようにするにはどうすればいいんでしょうか

A 回答 (2件)

一例です。


If文は不要ではないでしょうか。

その1
Dim ws As Worksheet
For Each ws In Worksheets
ws.Name = Replace(ws.Name, "T", "S")
Next

その2
Dim i As Long
For i = 1 To Sheets.Count
Sheets(i).Name = Replace(Sheets(i).Name, "T", "S")
Next
    • good
    • 2

変更後のシート名がすでに使われていないかどうかはチェックした方が良いと思います。



Sub Sample()
  Dim ws As Worksheet
  Dim sName As String
  Dim rtn
  '*** 変更後のシート名がダブらないかチェック
  For Each ws In Worksheets
    sName = Replace(ws.Name, "T", "S")
    If sName <> ws.Name Then
      On Error Resume Next
      rtn = 0
      rtn = Sheets(sName).Index
      If rtn <> 0 Then
        MsgBox ("変更後のシート名(" & sName & ")と同名のシートが存在しています")
        Exit Sub
      End If
      On Error GoTo 0
    End If
  Next
  '*** シート名変更
  For Each ws In Worksheets
    ws.Name = Replace(ws.Name, "T", "S")
  Next
End Sub
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!