- 締切済み
マクロ シート名変更
マクロ シート名変更 Sheet1,Sheet2,Sheet3の名前を、 Sheet1のA1~A3に入力してある名前にしたいときどうすればいいでしょうか。 そして、 次に、A1~A3の入力を変えたときにSheet1,2,3の名前も 変わるにはどうやればいいんでしょうか。 お願いします...
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- n-jun
- ベストアンサー率33% (959/2873)
左から1.2.3となっているシートであれば、 Sheet1のシートモジュールに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Range("A1:A3"), Range(Target.Address)) Is Nothing Then Exit Sub Worksheets(Target.Row).Name = Target.Value End Sub と言う感じでしょうか?
- imogasi
- ベストアンサー率27% (4737/17069)
基礎的なことを、丸投げして質問しているが、質問規約違反。ただスモールなコードで出来るものだから、書いてみておく。 ただSheet1,Sheet2,Sheet3の名前を、・・が例示なのか不定多数有るのか、しっかり質問に書いてない。 ーー Sheet1、Sheet2、Sheet3がシートタブの文字列なら Sub test01() Worksheets("Sheet1").Name = Worksheets("Sheet1").Range("A1").Value Worksheets("Sheet2").Name = Worksheets(Range("a1").Value).Range("A2").Value Worksheets("Sheet3").Name = Worksheets(Range("a1").Value).Range("A3").Value End Sub 順次実行の結果シート名が変わってしまう例で、初等者の出す問題として適当でない。 変更後のシート名の入力セルは、Sheet1、Sheet2、Sheet3以外のシートに置く例を考えるべきだ。 ーーー 後半>A1~A3の入力を変えたときにSheet1,2,3の名前も・・ これも初心者の考える課題ではない。質問者は、イベントという考えを勉強した後ですか。 それとA2の値を変えたとき、変える前の値は捉えるのが難しいのだ。 下記よりも、ましなやり方が有るかもしれないが 当初Sheet1の A1:B3に aa aa bb bb cc cc と入れておく。現在のシート名はaa,bb,ccとする。 シートaaのChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Set rng = Range("A1:A3") If Not Intersect(Target, rng) Is Nothing Then 'MsgBox Target.Address Worksheets(Target.Offset(0, 1).Value).Name = Target Target.Offset(0, 1) = Target End If Application.EnableEvents = True End Sub を入れておく。 これで今のaaシートのA1:A3のどれかの値を変えると、指定シート名が入力した文字列にかわる。2度3度変えても大丈夫。 ーーー こんな課題は、相当経験を積まないとできっこない。 コピー貼り付けして実行して、出来たとは思えても、 質問者には多分早すぎる課題と思う。 またChangeイベントは、値を抹消したときなどの、対策・エラーストップ回避方を作っておく必要が有るが、上記コードでは、細かくなるので省略している。 またエラーで止まったら、標準モジュールの Sub test02() Application.EnableEvents = True End Sub を実行して、シートのChangeの反応を回復しないとだめなコードである。
- tom11
- ベストアンサー率53% (134/251)
こんにちは、 Sheet1.Name = Range("a1").Value Sheet2.Name = Range("a2").Value Sheet3.Name = Range("a3").Value 以上のマクロを実行すれば良い様な。