• ベストアンサー

エクセルで、複数のシートからコンボボックスへ

エクセルVBA初心者です。 作成したワークシート名をVBAにてリストボックス内に表示し、それを選択するとそのシートに飛ぶようにするためには、どうすればいいでしょうか?? よろしくお願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

新規ブックを作成し、以下手順で試してみて下さい。 ◇ #1 の確認手順 ---------------------------------------------- ■STEP1: リストボックスの配置  1. Excelメニュー:[表示]-[挿入]-[コントロール ツールボックス]    をクリック  2. 1. で表示されたツールバーの[リストボックス]アイコンをクリック  3. ワークシート上に適当な大きさで[リストボックス]をドラッグ    して書き込む ■STEP2: コードの書き込み  1. Excel 画面のシート切り替えタブ(画面下)で、リストボックス    を書き込んだシートを選び、右クリック[コードの表示]を選ぶ    --> Visual Basic Editor (以下 VBE)が起動します  2. VBE 画面で、#1 の次の範囲をコピー&ペーストします    ' // Listbox 内のアイテムをDクリックしたら、そのシートを Activate する  (中略)~一番下まで  3. VBE を閉じます。 ■STEP3: 動作確認  リストボックスをクリックすると、シート名の一覧が表示されるはずです。 ◇ #2 の確認手順 ---------------------------------------------- > マクロ登録することが出来なかったんですが…汗 [表示]-[ツールバー]-[フォーム]でボタンを作成したのですね。#2 も >> シートに「コントロールツールボックス」> の CommandButton1 とあるとおり、配置しているボタンの種類が違います。 が。。。#2 の解説は一度忘れて、分かり易い方にしましょう。 1. Excel 画面で[Alt]+[F8] を押して VBE を起動 2. VBE 画面 [挿入]-[標準モジュール]をクリック 3. 2. で開いたスペースに下記のコードをコピー&ペースト Sub シート選択ダイアログを表示()   With CommandBars.Add     .Controls.Add(, 957).Execute     .Delete   End With End Sub 4. VBE を閉じる 5. Excel 画面に戻り、”[表示]-[ツールバー]-[フォーム]”の   ボタンをシートに貼り付けて、上記マクロを登録する

kdfc
質問者

お礼

KenKen_SP様 ご回答、ありがとうございます。 言われたとおりに、作成してみると成功しました。 ご迷惑かけて、大変申し訳ありませんでした。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#1に既にお答えは出ているが、>VBA初心者です。には荷が重い内容だと思います。 まず質問を達成するに必要な、要素技術が勉強されていない。丸投げになっている。 (最重要方針)要素に分解すること。 これは標準的な教科書を読んで、どういう事項が問題になるかを勉強するより他ない。卵と鶏のようですが。 学習が必要な要素 (1)1つのブックの中の全シートの名前を取出すコード (2)採り出したシート名を1つずつ、コンボのアイテムに追加する コード (3)コンボで、アイテムの1つを選択したとき、どう捉えるかのコード (4)(3)で捉えたとき「シートに飛ぶようにする」とはど言うことを意味するか。 (5)特に(3)で「XXしたとき」というイベントの考えの理解 こういう要素分解と、WEBなり本なりを調べて(実はこの程度では全て実例が載っている)ここまでは判りました、ここが判りませんの質問になるべきです。Googleなどで検索するとき、検索語に少し工夫が要りますが。 (1)は Sub test01() Dim sh As Worksheet For Each sh In ActiveWorkbook.Worksheets MsgBox sh.Name Next End Sub (2)は((1)と結合した) Sub test01() Dim sh As Worksheet For Each sh In ActiveWorkbook.Worksheets MsgBox sh.Name '--- Worksheets("sheet1").ComboBox1.AddItem sh.Name Next End Sub (3)は Private Sub ComboBox1_Change() MsgBox ComboBox1.Value End Sub Private Sub ComboBox1_Click() 同上 End Sub もある。 (4)は Private Sub ComboBox1_Click() Worksheets(ComboBox1.Value).Select End Sub とか Private Sub ComboBox1_Click() Worksheets(ComboBox1.Value).Activate ActiveSheet.Range("A1").Select End Sub

kdfc
質問者

お礼

imogasi様 ご回答ありがとうございます。 荷が重い内容でしたか… もっと、勉強せねばならないんですね… 先ほどの、KenKen_SPさんによって、解決しました。 imogasi様のご回答によって、大変勉強になりました。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

#1 です。ついでに別回を。 リストボックスではありませんが、シートに「コントロールツールボックス」 の CommandButton1 を一つ配置し、下記のコードを試して見てください。 Private Sub CommandButton1_Click()   ' // シート選択ダイアログを表示   With CommandBars.Add     .Controls.Add(, 957).Execute     .Delete   End With End Sub

kdfc
質問者

補足

ご回答ありがとうございます。 >リストボックスではありませんが、シートに「コントロールツールボックス」の CommandButton1 を一つ配置し、下記のコードを試して見てください。 上記の件ですが、実際に試してみましたが、マクロ登録することが出来なかったんですが…汗 また、先ほどご回答してくださったサブルーチンの件ですが、 ワークシート内にあるリストボックスを、マクロ登録をしようと思いましたが、マクロ名が、表示されないんですが… ご迷惑かけますが、よろしくお願いします。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

ワークシートに「コントロールツールボックス」の Listbox を配置 した前提で。 問題となるのは、ユーザーがいつ「シート名」を変更するか不明な ので、なるべく最新の情報に追従できるよう Listbox の値を更新 するタイミングをとらねばなりません。 クリックより、ダブルクリックの方が操作性で良いと思いましたので そのようにしてますが、ListBox1_Click イベントに差し替えれば、 クリックで移動するようにもできます。 ' // Listbox 内のアイテムをDクリックしたら、そのシートを Activate する Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)   On Error Resume Next ' エラーが発生しても無視する   ThisWorkbook.Sheets(ListBox1.Value).Activate End Sub ' // シートが Active になった時、Listbox が Active になったタイミングで ' // サブルーチンを呼び出し、最新の情報に書き換える Private Sub Worksheet_Activate()   Call EnumShNames End Sub Private Sub ListBox1_GotFocus()   Call EnumShNames End Sub ' // シート(グラフシート等も含め)の一覧を Listbox へ表示させるサブルーチン Private Sub EnumShNames()   Dim sh As Object   ListBox1.Clear   For Each sh In ThisWorkbook.Sheets     ListBox1.AddItem sh.Name   Next End Sub

関連するQ&A