- ベストアンサー
エクセルで、複数のシートからコンボボックスへ
エクセルVBA初心者です。 作成したワークシート名をVBAにてリストボックス内に表示し、それを選択するとそのシートに飛ぶようにするためには、どうすればいいでしょうか?? よろしくお願いします。
- みんなの回答 (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 画面に戻り、”[表示]-[ツールバー]-[フォーム]”の ボタンをシートに貼り付けて、上記マクロを登録する
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
#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
お礼
imogasi様 ご回答ありがとうございます。 荷が重い内容でしたか… もっと、勉強せねばならないんですね… 先ほどの、KenKen_SPさんによって、解決しました。 imogasi様のご回答によって、大変勉強になりました。
- KenKen_SP
- ベストアンサー率62% (785/1258)
#1 です。ついでに別回を。 リストボックスではありませんが、シートに「コントロールツールボックス」 の CommandButton1 を一つ配置し、下記のコードを試して見てください。 Private Sub CommandButton1_Click() ' // シート選択ダイアログを表示 With CommandBars.Add .Controls.Add(, 957).Execute .Delete End With End Sub
補足
ご回答ありがとうございます。 >リストボックスではありませんが、シートに「コントロールツールボックス」の CommandButton1 を一つ配置し、下記のコードを試して見てください。 上記の件ですが、実際に試してみましたが、マクロ登録することが出来なかったんですが…汗 また、先ほどご回答してくださったサブルーチンの件ですが、 ワークシート内にあるリストボックスを、マクロ登録をしようと思いましたが、マクロ名が、表示されないんですが… ご迷惑かけますが、よろしくお願いします。
- KenKen_SP
- ベストアンサー率62% (785/1258)
ワークシートに「コントロールツールボックス」の 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
お礼
KenKen_SP様 ご回答、ありがとうございます。 言われたとおりに、作成してみると成功しました。 ご迷惑かけて、大変申し訳ありませんでした。