- ベストアンサー
エクセルのマクロで複数のシートのセル値をシート名とする方法
- エクセルのマクロを使用して、複数のシートの特定のセルの値をシート名にする方法を教えてください。シート数は可変であり、シート名にしたいセル番地が固定されています。例えば、特定のセルに入力された「宛名」をシート名にしたい場合、新しいシート名の前に数字を振ることで重複を回避することもできます。
- エクセルのマクロ初心者ですが、複数のシートのセル値をシート名にしたいと思っています。シート数は常に変動し、シート名にしたいセルの場所は固定です。例えば、「宛名」というセルの値をシート名にする場合、新しいシート名の前に数字を振ることもできます。
- エクセルのマクロで複数のシートの特定のセルの値をシート名にする方法を教えてください。シート数は可変であり、シート名にしたいセルの場所が固定です。例えば、特定のセルに入力された「宛名」をシート名にした際、重複がある場合には新しいシート名の前に数字を振ることもできます。マクロ初心者であるため、より詳しい情報が必要です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! ごく単純にやってみました。 Sheetは1からあるとし、Sheet名はA1セルの名前にするようにしています。 ↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。 Sub test() Dim i As Long For i = 1 To Worksheets.Count Worksheets(i).Name = i & Worksheets(i).Cells(1, 1).Value Next i End Sub 「決まったセル」が別セルであれば、コード内の Cells(1, 1) の部分を変更してみてください。 以上、この程度ですが 参考になれば幸いです。m(__)m
その他の回答 (2)
- layy
- ベストアンサー率23% (292/1222)
仮の、発展しての話ですが 「名前とその連番」にした方が使いやすいのならこのタイミングで確認したらと思います。 さらに応用で、VBAでシート並べ替えもすれば宛名でならびますし、山田様だけの2シートを印刷ということがあればやりやすいかと思います。
お礼
返信が遅くなり、申し訳ありません。 もう少し勉強してみてから、また見直してみます。 ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
良く使うコードです。 いまシートが存在する以上、そのシートに何らかの名前が付いている。 Sub test01() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Name Next End Sub これを実行するとシート名が全部捉えられるのが実感できるだろう。 >全シートを選択し、をする必要もないし、アクチブにする必要もない。 これをその各々のシートのA1セルに入っている文字列でシート名を変更することになる。そう考えるのだ。 Sub etst02() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Name sn = sh.Range("A1").Value On Error GoTo err p1: sh.Name = sn Next Exit Sub err: sn = InputBox(sn & " はダブル。名前は") GoTo p1 End Sub 先頭に番号振るのは個人的に反対。 其れで上記のようにした。 ーー ただね、シートの挿入があるとこのプログラムが走るわけではない。 だから使うタイミングを考えないとだめなわけだ。 ーー シート挿入はイベントで捉えられて Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "挿入" End Sub なのだが、初心者には難しすぎるし、イベントが起こったときはまだA1セルに入力以前だ。 だから別途コードを考えないといけない。 上記の sn = InputBox(sn & " はダブル。名前は") が参考になって Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "挿入" sn = InputBox("シート名前は") Sh.Range("A1") = sn Sh.Name = sn End Sub どんどん他の事項に波及していく。マクロ初心者にはむりだ。 ただし本件限りでは、上記のThiswokbookのイベントを書くべきところ(画面)を勉強してみて。 Google照会「Thisworkbokk イベント」 これらは経験(解説書を読むのも含めて)でしかえられない。
お礼
返信が遅くなり、申し訳ありません。 正直なところ、VBAがほとんどわからないので難し過ぎたのですが、 先日入門書を買って勉強し始めました。 もう少ししたら、理解できるようになるかと思います。 がんばってみます。 ありがとうございました。
お礼
おぉ~ すごい! まさに希望通りの結果が得られました! しかも、思ったよりずいぶんスッキリしてるんですね・・・ CELL関数やRIGHT関数と組み合わせて、 最初のシート名をどっかのセルに反映させてから、「宛名」とつなげてシート名にする ・・・とかじゃないとムリかなあと思ってました。 ありがとうございました。 便利になります。