• ベストアンサー

VBAで複数のシート名を置換する処理

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オブジェクト 処理できるようにするにはどうすればいいんでしょうか

質問者が選んだベストアンサー

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 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

その他の回答 (1)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.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