- ベストアンサー
エクセルVBAでコンボボックス(2)
- エクセルVBAを使用して、コンボボックスのリストを表示する方法について質問します。
- コンボボックスのリストはドロップボタンをクリックすると表示されますが、選択した項目が表示されない問題があります。
- リストを表示させるたびにリストが追記される問題も発生しています。どのように対処すれば良いでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Thisworkbookのマクロに Private Sub Workbook_Open() With Sheets("Sheet1") .ComboBox1.Style = fmStyleDropDownList .ComboBox1.Clear .ComboBox1.AddItem "りんご" .ComboBox1.AddItem "ばなな" .ComboBox1.AddItem "みかん" End With End Sub とするか ユーザーフォームにコンボボックスがあるのなら Private Sub UserForm_Initialize() ComboBox1.Style = fmStyleDropDownList ComboBox1.Clear ComboBox1.AddItem "りんご" ComboBox1.AddItem "ばなな" ComboBox1.AddItem "みかん" End Sub にしてください。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
前の質問に答えたものです。 回答したけれど、それをよく内容を理解せず、自分勝手に1つの方法うを書いて、判ったとして、締め切っている。 私の疑問点にも答えてなない。 質問者のコードのAddItemのコードは、コンボをクリックしたときコンボにアイテムを設定する(だけの)コードです。 こういうのは少し判った人のする方法で、エクセルは初心者(や急ぐ人)向けにListFillRangeでセルとアイテムを連動させる便利な方法を設けているのだ。 普通コンボをクリックしたらアイテムをその際表示するしくみにするのではなく (1)ワークシーとやワークブックが表示・オープンされたときに項目は表示されないと使いにくいのでその段階では表示を済んでいるようにする (2)フォームであればフォームを表示されたとき(Initialize)にアイテムの表示をきちっと出るようにする (3)エクセルらしいやり方は、そのプロパティでListFilRangeのアイテムのセル範囲を定義する方法もあるが、前質問に私が示唆しているが、一顧だにしてない風である。この方法ならこんとろーるの編集モードを脱しておけば、シートを開くとアイテムはそろってている。 本質問ではワークシートへ直接コントロールを載せるらしいが。フォームに載せて使われることの方が多い。 そういうことも判ってないのに、難しいことをしようとしている。 >選ばれた状態になりません。 は上記のような基礎的なことも判ってないからで、上記(1)(2)(3)のどれかで解決する。 ーー そのほかに質問ではチェックボックスやコンボをクリックしたときでなく、別のコマンドボタンをクリックした時に値を取るような質問の書き方であった。 その点もコードを思いつくのはやさしくないことで、前質問の私の回答の最後のSubプログラム2個を参考にするか、WEB照会をして調べること。 まだここに質問しても十分理解できないレベルのようで、全般的な、VBAのコントロールの勉強・使用経験が必要と思う。
お礼
回答ありがとうございます。 >普通コンボをクリックしたらアイテムをその際表示するしくみにするのではなく 私もこの方法はなんか違うなとは思いましたが、質問時の段階ではこの方法しか思い浮かばなかったことと、 結果的に私の望む動作になっていたからこれでいいかなと思い、この方法を採用しました。 (結局はこの方法だと選択状態にならず今回の質問をしたわけですが…) >(1)ワークシーとやワークブックが表示・オープンされたときに項目は表示されないと使いにくいので >その段階では表示を済んでいるようにする ワークブックを開いた時点でリストに読み込まれるようにする。この方法はこの質問のNo.1さんが回答 してくれた方法ですね。No.1さんの回答でほぼ解決したので、今回はこれを採用したいと思っています。 >一顧だにしてない風である だってこの方法でやっても仕方ないんですもの。この方法でできることは知っていましたが、 それをやりたくないので前回の質問をしたのです。前質問で、この方法ではやりたくないと説明していなかったのはすいません。 >フォームに載せて使われることの方が多い。 そうでしょうね。webで出てくる説明もほとんどフォームで使う方法でした。しかし私がやりたかったのは フォームではありません。 >基礎的なことも判ってないからで、上記(1)(2)(3)のどれかで解決する。 はい。(1)の方法で解決しました。この質問のNo.1さんの回答です。しかし前回の質問時点で(1)の方法は思いつきませんでした。というか知りませんでした。 (2)(3)の方法は"妥協すれば"それでもできましたね。 あと、選択されたものを値として読み込む方法はそんな難しい方法ではないとは思っていました。前質問でポイントとして書いたのが紛らわしかったですね。すいません。 たしかに、基礎から順番にやっていくのも大事とは思いますが、基礎を完全に理解しなければそれ以上のことをやってはいけないということもないと思います。 最後に、本質問の主題の、なぜ本質問の方法だと選択状態にならないのか、また、選択状態にするにはどうしたらいいのかを教えていただけませんか? 基礎もわかっていないので知る権利はないのでしょうか。
お礼
回答ありがとうございます。 回答いただいた方法でほぼ解決いたしました。