• ベストアンサー

エクセルVBAでシート名を変更する方法を教えて下さい。

いつもお世話になっています。 エクセルである月ごとの表を作っています。 1シートひと月で、翌月はそのシートをコピーして新しいシートを作り、 使用しています。 VBAでシートをコピーすることはできたのですが、 その名前を翌月にする方法がわかりません。 シート名は単純に4月分なら「4」 5月分なら「5」です。 4月のシートをコピーすると、シート名が 「4(2)」となりますが、 これを自動で「5」とするにはどうしたら良いのでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 こんなところでどうでしょうか? 全角なら、全角オプションと書いてある下のコメントブロックを外してください。 '標準モジュール '----------------------------- Sub CopySheets()   Dim num As Integer   Dim num2 As Integer   num = Val(StrConv(ActiveSheet.Name, vbNarrow))   On Error GoTo ErrHandler   If num > 0 Then     ActiveSheet.Copy After:=ActiveSheet     num2 = num Mod 12 + 1     ''全角オプション     'num2 = StrConv(num2, vbWide)     ActiveSheet.Name = CStr(num2)   End If   Exit Sub ErrHandler:   MsgBox Err.Number & " " & Err.Description End Sub

その他の回答 (3)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

この質問でいやらしいところはシート名を安易に全角で書いているところです。 「(2)」は本当は半角の「(2)」の誤りだと分かるのですが、「4」は半角なのか、全角なのか迷います。半角か、全角かで書くコードが変わるからです。 とりあえず本来のシート名は「全角」であることを想定して、アクティブシートを複写するマクロサンプルを書きました。それがMacro1です。 でもMacro1だと既にシート「5」がある状態でシート「4」を複写するとエラーになります。それを回避するようにしたのがMacro2になります。 文字列の処理が分からない場合は関数のヘルプを調べてください。 Sub Macro1() Dim wk As String   ActiveSheet.Copy after:=ActiveSheet   With ActiveSheet     wk = Left(.Name, InStr(.Name, "(") - 1)     If IsNumeric(wk) Then       wk = StrConv(wk, vbNarrow)       .Name = StrConv(Trim(Str(Val(wk) + 1)), vbWide)     End If   End With End Sub Sub Macro2() Dim wk As String Dim ws As Worksheet   ActiveSheet.Copy after:=ActiveSheet   With ActiveSheet     wk = Left(.Name, InStr(.Name, "(") - 1)     If IsNumeric(wk) Then       wk = StrConv(Trim(Str(Val(StrConv(wk, vbNarrow)) + 1)), vbWide)       For Each ws In Worksheets         If ws.Name = wk Then           MsgBox "既に同名のシートがあるので中断します"           Exit Sub         End If       Next       .Name = wk     End If   End With End Sub

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

補足です。 一番右のワークシートの名前は Worksheets(Worksheets.Count).Name で取得できます。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

シートをコピーすると、新しいシートがアクティブになります。 アクティブシートの名前を変更します。 シート名に年、日を加えて日付データ化した後DateAdd関数で 月をプラスして、新しい日付から月を抜き出す、という方法が ありますが、今回はシート名に「1」プラスして、13だったら 1にする、としてもいいかもしれません。 アクティブシート名の変更は、 Activesheet.Name = "hoge" のようにします。 ただ、既に存在するシート名と重複していたらエラーになりますので エラー処理(前もって既存のシート名をチェックしておくなど)が必要 になるかもしれません。

関連するQ&A