エクセルVBAでコンボボックスの使い方

このQ&Aのポイント
  • エクセルVBAを使用してコンボボックスの使い方について質問します。
  • チェックボックスから選んだ数字で計算するプログラムを実現したいです。
  • 具体的なプログラムのイメージ図を添付しています。リストボックスに値を入力する方法や、選択された数字を変数として取得する方法がわかりません。
回答を見る
  • ベストアンサー

エクセルVBAでコンボボックス

エクセルVBAのコンボボックスの使い方について質問します。 実現したいプログラムは 「チェックボックスから選んだ数字で計算するプログラム」 です。 具体的には… まず、コンボボックスをシート上に配置します。そのコンボボックスには 数字の1から10を選べるようにしておきます。 次に、コマンドボタンを配置します。これは単にプログラムをスタート させる目的です。 ユーザーは、まずコンボボックスから好きな数字を選択します。 そしてスタートボタン(コマンドボタン)を押します。 すると、選んだ数字の2倍がセルに表示されます。 さらに発展系としては… チェックボックスを4つ配置します。各チェックボックス には、+、-、×、÷を割り振っておきます。 また、コンボボックスを2つ用意し、それぞれ1~10の数字をリストにします。 ユーザーは、チェックボックスから好きな記号を選び、さらにコンボボックスから 好きな数字を選びます。そしてスタートボタンを押すと、選んだ数字を選んだ記号 で計算した値がセルに表示されます。 というようなプログラムを考えているのですが、うまくできません。 ポイントは、 ・チェックボックスにリストを入力する方法 ・チェックボックスの選択状態や、リストボックスから選ばれた数字を、  変数として取得する方法 インターネットで調べているのですが、リストボックスに値を入れるのにもマクロを走らせ なければならない方法とか、ユーザーフォームでの説明ばかりでなかなか実現に至りません。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform05.html プログラムのイメージ図としては添付の図の通りです。 どのようにプログラムを書けばいいのでしょうか。

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

  • ベストアンサー
noname#157410
noname#157410
回答No.1

添付されている、URLですべて説明されています。 どの部分でつまずいているのでしょうか? 数字の1から10を選べるようにしておきます。 たとえばComboboxのListの場合 Sheet2 A列に1から10まで入力してください。 Private Sub ComboBox1_Click() 'Comboboxがクリックされたときとなります。 Dim lRow As Long Dim i As Long, myCnt As Long Dim myData      With Worksheets("Sheet2") lRow = .Range("A" & Rows.Count).End(xlUp).Row myData = .Range("A1:A" & lRow).Value End With With ComboBox1 .ColumnCount = 1 .List = myData End With End Sub これが呼び込みなのですが このようにFormの説明されている分を読み替えて使ってみてください。

dansin_Goo
質問者

お礼

これでできました。 お騒がせしましたが、なんてことはなかったです。 Private Sub ComboBox1_DropButtonClick() ComboBox1.Clear ComboBox1.AddItem "りんご" ComboBox1.AddItem "みかん" ComboBox1.AddItem "バナナ" ComboBox1.AddItem "マンゴー" End Sub 少なくともリストを表示させるためにDropButtonをクリックしなければならないので、 これでマクロが実行されたことになるのですね。

dansin_Goo
質問者

補足

回答ありがとうございます。 >Private Sub ComboBox1_Click() 'Comboboxがクリックされたときとなります。 あ、これってもしかしてコンボボックスの右側の下向き三角形を押し、リストがベローんって 出てくるときの動作ですか?  この動作でリストに入力されるということは、ユーザーから見ればあたかも初めからリストが 入っているように見えるということですね!? もしそうであれば私が勘違いというか、早とちりしていました。 ちょっと確かめてみます。

その他の回答 (1)

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

こんなのは、コントロールの練習問題の範囲内のことではないですか。 何処がわからないのか。 コマンドボタンで、コンボの値がそのとき(瞬間)の選択されている値が取られる ボタンのクリックイベントのところにコードを書く。 >リストボックスに値を入れるのにもマクロを走らせなければならない方法 必ずしもあそうではない。エクセルらしいやり方では、プロパティのListFillRangeにセル範囲(例D1:D5など)を直接指定できる。 VBAでもListFillRangeに指定できるが。 >・チェックボックスにリストを入力する方法 コンボボックスかリストボックスのミスタイプでは。チェックボックスにリストとは? ーー コンボの話から後半リストボックスに話題をけたのはなぜ? ーー >・チェックボックスの選択状態や、リストボックスから選ばれた数字を、 変数として取得する方法 VBAの本や、WEB(Google)などで「VBA チェックボックス」「VBA リストボックス」で照会すれば出てくる話題でしょう。 ーー チェックボックス Private Sub CommandButton1_Click() MsgBox Worksheets("Sheet1").CheckBox1.Value End Sub ーー 下記はリストボックスで必ずどれか選択して実行すること(でないとエラーになる) Private Sub CommandButton1_Click() MsgBox Worksheets("Sheet1").ListBox1.List(Worksheets("Sheet1").ListBox1.ListIndex) End Sub ーーーー こんなところへ質問する前にWEB照会を活用すべきだ。

dansin_Goo
質問者

お礼

これでできました。 お騒がせしましたが、なんてことはなかったです。 Private Sub ComboBox1_DropButtonClick() ComboBox1.Clear ComboBox1.AddItem "りんご" ComboBox1.AddItem "みかん" ComboBox1.AddItem "バナナ" ComboBox1.AddItem "マンゴー" End Sub 少なくともリストを表示させるためにDropButtonをクリックしなければならないので、 これでマクロが実行されたことになるのですね。

dansin_Goo
質問者

補足

回答ありがとうございます。 リストボックスとなっているところは、コンボボックスの間違いです。すいません。 >プロパティのListFillRangeにセル範囲(例D1:D5など)を直接指定できる。 セル範囲をコンボボックスのリストとして呼び込んできたいのではなく、はじめからコンボボックスのリスト にリスト化されていることを実現したいのです。入れたいリストはコードのほうに書きます。 コードに書いたリストをコンボボックスのリストに読み込むには、プログラムをいったん走らせなければなりません(少なくとも私の紹介したサイトはそのように書いてあると思います)。これでコンボボックスにリストが入力され、それから選択するのだと思います。 私がやりたいのは、あくまで、はじめからリスト化されている方法です。つまり、エクセルを開くとすでに コンボボックスにリストが入っていて、好きな数字を選択し、「計算実行」ボタンを押すと計算するプログラムです。

関連するQ&A

  • Excel VBA コンボボックスの使い方

     VBAでのコンボボックスの使い方をしらべているのですが、うまく見つかりません。コンボボックスのリストに登録するのはどうしたらよいのでしょうか?シート上のセル内のデータを使用しないとリストの登録は出来ないのでしょうか?VBA上で作成して、ユーザーフォームで選択できるようにしたいと思っています。VBAをはじめたばかりなので初歩的な質問で大変恐縮です。どなたかわかる方がいらっしゃったらお願い致します。

  • エクセル コンボボックスについて

    XP エクセル2003なのですが、 現在ワークシートに郵便番号と住所のリストを作成しています。    郵便番号     住所  ***-**** ○○県○○市・・・  ***-**** XX県XX市・・・ ユーザーフォームにテキストBOXとコンボBOXとコマンドボタンを 配置しています。 コンボBOXではリストにしている住所のみを表示していますが、 その中から探すのが大変です。そこで、 テキストBOXに郵便番号を入力し、 コマンドボタンをクリックすると、 コンボBOXに該当する住所が表示されるようにしたいのですが、 どうすればいいのか、何から始めればいいのか、 全く分かりません・・・。いろいろな方法があると思うのですが、 教えていただければ幸いです。 初心者ですので質問形式が悪いかもしれませんが よろしくお願いします。

  • エクセルVBAのコンボボックスについて

    エクセルVBAでActiveXコントロールのコンボボックスを配置して以下の プログラムを記述しているのですが、 コンボボックスでAを選択した後に、もう一度Aを選択したときに イベントが発生しません。 Private Sub ComboBox1_Change()ならイベントが発生しないのは 分かるのですが、Clickの場合は、選択された値が変わらなくても イベントが発生すると思ってたのですが。 VB6では問題なく発生しています。 ちなみにセルの入力規則ではなくてコンボボックスで実現したいです。 Private Sub ComboBox1_Click() 'ここに処理を記述 End Sub

  • エクセルVBAでコンボボックスの非表示について

    最近VBAを勉強し始めたのですが、コントロールについてわかりませんので、ご教授お願いします。 コンボボックスを初期では非表示、トグルボタンをクリックすると、コンボボックスを表示させる方法を教えてください。 ユーザーフォームについてまだ未熟なので、すみませんがよろしくお願いします。

  • コンボボックスの位置取得

    今エクセルのVBAでプログラムを組んでいます。 セルA1の位置にコンボボックスを配置して コンボボックスの矢印をクリックした時に コンボボックスの配置を取得したいのですが どうすればいいのでしょうか? 上記の例で言えば コンボボックスをクリックすると列、行 (1,1)を数字で取得するようにする。

  • コンボボックスについて

    2007です。いつもお世話になります。 フォーム上にチェックボックスがあります。 チェックが入った時点で同じフォーム上のコンボボックスのリストから特定のものを選択したいです。 しかし、チェックか゛入っていなければそのコンボボックスのリストから特定のものを除いたものを選択するようにする・・出来るでしょうか? チェックありならばコンボボックスの値集合ソース1.2.3の内の2だけを チェックなしならばコンボボックスの値集合ソース1.2.3の内の1.3だけしか選択出来ない というイメージです。 分からないなりに =IIf([チェック1]="true","1,"2" Or "3") にしたら、リストから選択どころか、-1という数字が出てきてしまいました。

  • コンボボックスの自動更新について

    コンボボックスの自動更新について エクセルのVBAで、ユーザーフォームを使用しています。 ユーザーフォームの中には「入力」ボタンとコンボボックスと テキストボックスがあります。 コンボボックスは、「ABCDEF」と6つのリストがあります。 ユーザーフォーム起動時には、コンボボックスは空欄で コンボボックスから、入力したい商品を選んで、入力ボタンを押して コンボボックスとテキストボックスの内容を入力・コンボボックスを 空欄に戻しています。 これを、「A」を選んで入力ボタンをおしたら「B」が選ばれる。 「B」を選んで入力ボタンをおしたら「C」が選ばれるといったように コンボボックスに表示されるリストを自動で更新することは できないでしょうか? Select case などを利用して組み立てようとしたのですが、 数時間以上調べても出来ません。 教えていただけると助かります。

  • Excel VBA コンボボックスの初期値の設定について

    いつもお世話になっています。 Excel VBA コンボボックスの初期値の設定について教えてください。 ユーザーフォームを表示させた時、そこにあるコンボボックスには何も表示されていません。 コンボボックスのボタンを押すとちゃんと 「アジア」「ヨーロッパ」「アメリカ」等の語群が表示されます。 ユーザーフォームを表示させた時点でコンボボックスに「アジア」を表示させるにはどうすればいいか教えてください。 よろしくお願いします。

  • コンボボックスから検索するVBA(エクセル)

    sheet1にメニュー画面 sheet2に一覧表を作成しました。 (1)sheet1でユーザーフォームを起動させる。 (2)ユーザーフォームにはコンボボックスを1つ、コマンドボタンを2個配置しました  (3)コンボボックスのプルダウンメニューはsheet2の一覧表より取得しました (4)sheet2の一覧表は今後データが増えていきます(データは4行目以降) という条件で以下のコードを作成しました。 (1)と(2)のコマンドボタンは正常に作動しています。 コンボボックスのコードのみ書いています。 Private Sub UserForm_Initialize() Dim i As Long With Worksheets("sheet2") For i = 4 To .Cells(Rows.Count, 3).End(xlUp).Row ComboBox1.AddItem Cells(i, 3).Value Next i End With End Sub このときプルダウンメニューを押しても空欄が表示されてしまいます。 できない理由が分かりません。よろしくお願いします。 また、Private Sub ComboBox1_Change()とは何が違うのでしょうか? 最近 VBAを始めた初心者です。よろしくお願いします。

  • コンボボックスの使い方について

    環境はWIN98 VC++6.0 MFCです。 コンボボックスを初めて使うのですが、コンボボックスに何かを記入し、コマンドボタンを押すとコンボボックスのプルダウンのリストの中に追加されるようにするにはどうすれば良いですか? 具体的なコードなり参考サイトを教えてください。

専門家に質問してみよう