- ベストアンサー
Excelの各シートに自動的に名前をつけられませんか?
Excelの各シートのタグというんでしょうか(最初にsheet1とかになっている部分です)、ここにそのシート内にある所定のセルの内容をそのまま表示する方法ってありますか? 具体的にいうと、人事の個人別異動履歴等を個人ごとのシートで管理したいんです。 例えば、各シートのA1のセルに社員コードを入れるようにするとして、シート名を自動的にその番号にできないかと思っているんです。 可能でしょうか? よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#4です。お礼の中に記された >各シートの同じセルにあるデータをそのシートの名前にしたいんです。 この方が簡単です。 Sub test01() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ' MsgBox ws.Name ' MsgBox ws.Range("a1") ws.Name = ws.Range("a1") Next End Sub で出来ました。
その他の回答 (5)
- happypoint
- ベストアンサー率36% (521/1422)
#3です。 回答ではありません。 >1ブックに許されるシート数には制限があります。 ちなみにExcelの仕様を調べてみましたら、 ブックのシート: 使用可能メモリに依存 (既定では 3) だそうです。 ただあまりひとつのブックに大量のシートを作ると、 ファイルが巨大になったり、 ふとした拍子にファイルが壊れそうで、精神衛生上あまり良くないですね。^^
お礼
たびたびありがとうございます。 Accessですか! 実はPCに入ってないんですよ。 でも確かにそっちの方が良さそうですね。 それと、現在のシート数は120くらいなんですが、今のところストレスなく動いてますよ。 でも多すぎるんでしょうか?
- imogasi
- ベストアンサー率27% (4737/17069)
VBAで簡単です。 (テストデータ)A1:A3 山田三郎 野田和郎 川野寛 (プログラム) Sub test03() For i = 1 To 3 Worksheets.Add.Name = Worksheets("sheet4").Cells(i, "A") Next i End Sub (1)判りやすくするため3人分にしてテストしました。社員名をSheet4のA1:AXまでに漢字で入れてください。123 人であれば、For i = 1 To 123とします。 (2)名前をA列に入れたから、"A"となっています。 D列に入れたら"D"に変えてください。 (3)1ブックに許されるシート数には制限があります。 いくらだったか忘れました。 (4)VBAは、ALTキーを押しつつ、F11キーを押す。VBE画面が出たところで (5)ALTキーを押しつつI(挿入)次いでM(標準モジュール)出てきた画面に上記を貼りつける。 F5(実行)キーを押す。 同姓同名は困ります。なにか区別する方法を考えること。
お礼
詳しい説明をありがとうございます。 でも、やりたいこととちょっと違うみたいなんです。 1列にあるデータを取り込みたいのではなく、各シートの同じセルにあるデータをそのシートの名前にしたいんです。 でも、この方法も別のことには使えますね。 ありがとうございました。
- happypoint
- ベストアンサー率36% (521/1422)
こんにちは。 個人別異動履歴の個人ごとのシートは、もう出来上がっているものでしょうか。 すでに出来上がっているシート名を、 マクロで一括して変更したいならば、 #1,#2さんの処理をさらに For Each ~ Next でくくって、 全シートをいっぺんに変更する処理が必要ですね。 この場合、事前にシート名が重複しないかチェックしたり、 変更処理中にシート名のダブりが発生しないか、 入念にチェックする必要があるでしょうね。 これはどちらかというとアドバイスですが、 EXCELより、Accessが得意とする分野のような気がしますね。
#1のats8181oyajiさんのおっしゃるようにActiveSheet.Nameでできます。 もっと簡単に、A1が書き換えられたと同時に変更しようと思えば Worksheet_ChangeイベントでTarget.Addressが"$A$1"の時だけ ActiveSheet.NameにA1の値を入れるようにすればいいですよ。
お礼
ありがとうございます。 さっそくやってみたいんですが、ちょっとトラブルがあってすぐにできません。 あとでこれを参考にやってみますね。
- ats8181oyaji
- ベストアンサー率38% (94/244)
こんにちは、ats8181oyajiです 結論から。。。できます。 ActiveSheet.Nameというのを使います。 実際に私がVisualBasicEditorでテストをした 関数を以下にのせておきます。 Sub test() MsgBox "アクティブ シート名: " & ActiveSheet.Name ActiveSheet.Name = "test1" MsgBox "アクティブ シート名: " & ActiveSheet.Name End Sub この例の"test1"を指定セルにしてあげれば よろしいかと思います。 では。
お礼
ありがとうございます。 さっそくやってみたいんですが、ちょっとトラブルがあってすぐにできません。 あとでこれを参考にやってみますね。
お礼
なんとかできましたっ! ありがとうございました!