- ベストアンサー
エクセルVBAでシート名を変更する方法を教えて下さい。
いつもお世話になっています。 エクセルである月ごとの表を作っています。 1シートひと月で、翌月はそのシートをコピーして新しいシートを作り、 使用しています。 VBAでシートをコピーすることはできたのですが、 その名前を翌月にする方法がわかりません。 シート名は単純に4月分なら「4」 5月分なら「5」です。 4月のシートをコピーすると、シート名が 「4(2)」となりますが、 これを自動で「5」とするにはどうしたら良いのでしょうか?
- みんなの回答 (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)
この質問でいやらしいところはシート名を安易に全角で書いているところです。 「(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)
補足です。 一番右のワークシートの名前は Worksheets(Worksheets.Count).Name で取得できます。
- marbin
- ベストアンサー率27% (636/2290)
シートをコピーすると、新しいシートがアクティブになります。 アクティブシートの名前を変更します。 シート名に年、日を加えて日付データ化した後DateAdd関数で 月をプラスして、新しい日付から月を抜き出す、という方法が ありますが、今回はシート名に「1」プラスして、13だったら 1にする、としてもいいかもしれません。 アクティブシート名の変更は、 Activesheet.Name = "hoge" のようにします。 ただ、既に存在するシート名と重複していたらエラーになりますので エラー処理(前もって既存のシート名をチェックしておくなど)が必要 になるかもしれません。