- ベストアンサー
シート名をコンボボックスで入力
こんにちは。 早速ですが質問です。 エクセル97を使用しています。 シート名を変更するときにコンボボックスなどを表示し、そこから選択して シート名を入力できるようにしたいのですが可能でしょうか? リストから選んで入力できるかたちなら、なんでも構いません。 リストはシート名を変えるシートとは別の他のシートにあります。 つたない説明ですがよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
多分、マクロでないと無理でしょう。書いてみました。 (0)変更するシート名が入力されたセル範囲に範囲名『SheetNames』を付けます。 この範囲は矩形と想定しています。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、 (1)挿入→ユーザーフォーム でユーザーフォームを挿入します。 (2)そのユーザーフォームにListBoxを2つ、CommandButtonを1つ作ります。 (3)UserForm1のコードウインドウに貼り付け。 (コードウインドウはフォームをダブルクリックで出てくる) ↓ Private Sub CommandButton1_Click() Dim OldName As String '選択した今のシート名 Dim NewName As String '選択した新しいシート名 On Error GoTo ErrorHandler '同一シート名を指定した場合の対応 'シート名をセット OldName = ListBox1.List(ListBox1.ListIndex) NewName = ListBox2.List(ListBox2.ListIndex) 'シート名を変更する Worksheets(OldName).Name = NewName '選択したシート名を削除する 'ListBox1.RemoveItem ListBox1.ListIndex 'ListBox2.RemoveItem ListBox2.ListIndex Exit Sub ErrorHandler: '既にあるシート名を指定した場合 If Err = 1004 Then MsgBox Error(Err) End Sub Private Sub UserForm_Initialize() Dim ws As Worksheet 'ワークシート Dim rg As Range 'セル 'ListBox1に現在のワークシート名を取り込む(アクティブシート以外) For Each ws In ThisWorkbook.Worksheets If ws.Name <> ActiveSheet.Name Then ListBox1.AddItem ws.Name End If Next ListBox1.ListIndex = 0 '最初のシート名を選択状態にしておく 'ListBox2に変更するワークシート名を取り込む For Each rg In Range("SheetNames") ListBox2.AddItem rg.Text Next ListBox2.ListIndex = 0 '最初のシート名を選択状態にしておく End Sub (4)変更するシート名が登録されたシートのコードウインドウに貼り付け (表示→プロジェクトエクスプローラでプロジェクトエクスプローラを出しておけば特定は容易です) ↓ Sub SheetNameChange() UserForm1.Show End Sub (5)シートに戻り、変更するシート名が登録されたシートからツール→マクロ→マクロで『SheetNameChange』を実行します。 (6)ユーザーフォームで、もとのシート名(ListBox1)と変更するシート名(ListBox2)を選択してボタンを押せば変更されます 『選択したシート名を削除する』の次の2行のコメント『'』を削除すれば、既に使ったシート名は削除されます。 Excel97で動作確認しました。ご参考に。
お礼
こんにちは。 早速のご回答頂いたのに返信遅くなりまして、申し訳ありません。 大変助かりました。 短時間で作ってしまうなんて、すごいですね! マクロはあまり詳しくないのですが、これから勉強しようと思います。 またよろしくお願いします。 ありがとうございました。