- ベストアンサー
EXCELのシート名を一括変更するマクロ
マクロの超初心者ですが、EXCELのシート名を一括変更するマクロを考えてます。 例えば、1つのBOOKで「1」~「31」までの名前が入っているシートを予め用意しておいて、マクロを実行するとメッセージボックスがでてきて、そこに200806と入力するとシート名の「1」が『20080601』に、「2」が『20080602』という感じで31日分自動でできるような方法はないでしょうか?いつも手入力でやっていて大変なので、なにか方法があれば教えて欲しいです。お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Sub sample() Dim s As String Dim i As Integer s = InputBox("年月を入力してください(例:200806)") If s = "" Then Exit Sub For i = 1 To 31 Sheets(Trim(Str(i))).Name = s & Right("0" & Trim(Str(i)), 2) Next End Sub
その他の回答 (3)
- marbin
- ベストアンサー率27% (636/2290)
InputBoxのサンプルをアップしておきます。 Dim defalttuki As String Dim tukiinput As String defalttuki = Format(Date, "yyyymm") tukiinput = Application.InputBox("年月指定", "年月を指定して下さい", defalttuki) If tukiinput = "False" Or tukiinput = "" Then Exit Sub MsgBox tukiinput
お礼
ご回答いただきありがとうございました。実際にやってみましたが、私の思っているように動きませんでした。今後の参考にさせていただきたいと思います。
- chokiki
- ベストアンサー率36% (9/25)
Sub test() Dim ws As Worksheet Dim i As Integer Dim buf, buf2 As String buf = InputBox("シート名の先頭に挿入する文字列を指定して下さい", "シート名入力") For Each ws In Worksheets buf2 = Format(ws.name, "00") ws.name = buf & buf2 Next End Sub (これは全シートを対象とした場合です。参考までに。)
お礼
ご回答いただきありがとうございます。指定の通りにやってみたところうまくできました。ただ、変更したくないシートもあったので、全シートの名前を変更する場合に使わせていただきます。またなにかあればご教示いただければと思いますのでよろしくお願いします。
- marbin
- ベストアンサー率27% (636/2290)
MsgBoxには入力することは出来ません。 InputBoxなどを使うことになると思います。 ループの仕方です。 Dim i As Integer For i = 1 to 31 msgBox i Next i 今月の日数を取得するサンプルです。 Dim tuitati As Date Dim nissuu As Integer tuitati = DateSerial(Year(Date), Month(Date), 1) nissuu = DateAdd("m", 1, tuitati) - tuitati MsgBox nissuu これは今月の日数ですが、応用しだいで指定月の日数を取得できます。 取得した日数分だけループしたら必要日数のシートのリネームが出来ます。 また、日付けの表氏形式は、Format関数でいけます。 シートのリネームは Worksheets("hoge").Name = "hogeratta" のようにします。 ただ、既存のシート名と重複する場合にはエラーになります。 前もって重複してないかチェックする必要があります。 InputBoxについては、VBAヘルプを参照してください。
お礼
丁寧なご回答ありがとうございます。 InputBoxの間違いですね。ただ今回のアドバイスは私のわずかなマクロスキルでは難しくてよくわかりませんでした。せっかく丁寧にご教授いただいたのに申し訳ありません。今後のマクロの勉強に役立たせていただきます。
お礼
ご回答いただきありがとうございます。思い通りに動きました!教えていただきありがとうございました。