• ベストアンサー

シート名をコンボボックスで入力

こんにちは。 早速ですが質問です。 エクセル97を使用しています。 シート名を変更するときにコンボボックスなどを表示し、そこから選択して シート名を入力できるようにしたいのですが可能でしょうか? リストから選んで入力できるかたちなら、なんでも構いません。 リストはシート名を変えるシートとは別の他のシートにあります。 つたない説明ですがよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.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で動作確認しました。ご参考に。

yarou
質問者

お礼

こんにちは。 早速のご回答頂いたのに返信遅くなりまして、申し訳ありません。 大変助かりました。 短時間で作ってしまうなんて、すごいですね! マクロはあまり詳しくないのですが、これから勉強しようと思います。 またよろしくお願いします。 ありがとうございました。

関連するQ&A