• ベストアンサー

エクセル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

  • Excel VBA シート名変更時、重複していたら連番を付けたい

    VBAで下記のように変数を使用しシート名の変更をしたいと考えています。 ActiveSheet.Name = nen & "." & getsu nenには年が、getsuには月が入っていて、2009.12のような名前にするつもりです。 ただ、既に同じブック内に同じ名前のシートが存在する場合、 2009.12(2)のように、普通にシートをコピーしたときにつく連番と同じように、 自動的に連番をつけたいと考えているのですが、よい方法が分かりません。 なお、2009.12と2009.12(2)があれば、2009.12(3)となるように、 イメージとしては()の数字が同名のシートの数分増えるようにしたいと思っています。 なにとぞご教授いただけますでしょうか?

  • Excelで一月分のシート名変更

    エクセルで日報を製作する際に、 一つのブックに一月分のシートを入れて入力をしているのですが、 シート名を「1日」「2日」「3日」…として作る際、 例えばB2セルに日付の数字のみを入力するとして、 「1日」目のシートのみを作った状態から、 一気に「31日」までのシートをコピーする方法は無いでしょうか? VBAを使用すれば可能だとは思うのですが、 その後VBAを解除しても一度入れたシート名が動かないようになっていると有難いです。

  • excel vba シートがなければコピーしたい

    excel vba で教えてください sheet名0を雛形に、使用者が1 2 3のsheet名でコピーして利用できるようにしたい。1はあるのでコピーを作らない。2はないのでsheet名0をコピーして作るといったように現在sheet2があるや否やで作成するや否やを判断してsheet copyをしたい。 すべてのsheet を名前をしらべつつ判断したいのです 教えてください

  • VBA シート名を先月の名前にしたい

    VBA シート名を先月の名前にしたい お世話になります。 excelのシート名を、当年先月の名前(2013年4月なら”2013年3月”)にしたいのです。 当月ならうまくいくのですが、VBAでいいコーディングがあればご教示ください。 宜しくお願いします。

  • エクセルシートの塗りつぶしをVBAでやるには?

    エクセルのセル塗りつぶしについて(VBA) いつもお世話になっています。 エクセルシートで、任意のセルに数値を入力したとき、入力したセルから右側に向けて、その数値分、自動で塗りつぶすようにしたいのですが、どのようにすれば良いのでしょうか? 色は何でも構いません。 画像添付します。

  • エクセル マクロでシート名変更

    Excelで、作成してあるフォーマットに新しく数値をコピーして完成した表を別のブックに移動して保存しようと考えています。その際、シートのA1セルの値を自動的にワークシート名に持ってきたいのですが、やり方が分からず困っています。 シート名のところ以外は、なんとなくマクロの記録を使ってできそうなのですが、A1セルの値を自動的にシート名にすることができずに引っかかっています。 いい方法があれば教えてください。 よろしくお願いいたします。

  • Excelのシート名変更について

    いつもお世話になっています。 エクセルにおいて、シート名を自動変更することは可能でしょうか? 現在、1ファイルにシートを100枚用意してあります。 それぞれのシートに「1」~「100」という名前を付けてあります。 このファイルをコピーして、新しいファイルのシート名を「101」~「200」としたいのです。 現在は、一枚ずつ手入力をしていますが、後10ファイル以上(1000シート以上)あり、また今後も発生するためできるだけ簡単に変えられる方法を探しています。 このOKWave内を検索し、欲しい内容に近い回答がありましたので、下記のようなマクロを作成してみましたが、「インデックスが正しくありません」というエラーが出てしまいました。 マクロについては、全く知識がないので、ぜひご教授のほどよろしくお願いいたします。 Sub Macro1() For counter = 101 To 200 Sheets(counter).Select ActiveSheet.Name = CStr(counter) Sheets(counter + 1).Select Next End Sub

  • EXCELの現在シート名の変更

    いつもお世話になっております。 excelで、現在開いているシート名をVBAで変更しようとしているのですが、なかなかうまく行きません。 と言うのも、シート名がわかれば、名称変更は簡単なんですが・・・アバウトに 「現在選択されているシート名をAAAに変更する」 といったことは可能なんでしょうか? 宜しくお願い致します。

  • シート名を変更するとVBAが実行出来ない

    どなたか教えてください。 エクセル2003を使用しています。 毎日の売上を商品ごとに計上する表を作成しています。 その中で複数の細分化したマクロを組み合わせて実行できるようにしていました。 しかし、ファイル名を変更するとエラーになり実行出来ませんでした。 今後、ファイル名を「2009年8月分」や「2009年9月分」といったかたちで、月ごとに変更したいと考えています。 この場合、どういったVBAを使用すればいいでしょうか。どなたかお教え下さい。 ちなみに、エラーで表示されるVBAは、「Application.Run」が使用されているようです。

  • シートの名前の変更について(VBA)

    いつもお世話になっております。 VBAでシートの名前の変更を行おうと考えています。エクセルのシートで手動でシートの名前変更を入力すると使用できない文字は、入力が出来ないようになっています。VBAでテキストボックスへの入力を同じように規制する場合、Change()を使って1文字づつチェックするルーチェンを組むしかないのでしょうか? 取って置きの手法がありそうな気がしますが、思いつきません。どなたか?助けて頂けないでしょうか?よろしくお願いいたします。

専門家に質問してみよう