性格悪い人が優勝

エクセルVBAのコンボボックスの使い方について質問します。

実現したいプログラムは
「チェックボックスから選んだ数字で計算するプログラム」
です。

具体的には…
まず、コンボボックスをシート上に配置します。そのコンボボックスには
数字の1から10を選べるようにしておきます。
次に、コマンドボタンを配置します。これは単にプログラムをスタート
させる目的です。
ユーザーは、まずコンボボックスから好きな数字を選択します。
そしてスタートボタン(コマンドボタン)を押します。
すると、選んだ数字の2倍がセルに表示されます。

さらに発展系としては…
チェックボックスを4つ配置します。各チェックボックス
には、+、-、×、÷を割り振っておきます。
また、コンボボックスを2つ用意し、それぞれ1~10の数字をリストにします。
ユーザーは、チェックボックスから好きな記号を選び、さらにコンボボックスから
好きな数字を選びます。そしてスタートボタンを押すと、選んだ数字を選んだ記号
で計算した値がセルに表示されます。

というようなプログラムを考えているのですが、うまくできません。

ポイントは、
・チェックボックスにリストを入力する方法
・チェックボックスの選択状態や、リストボックスから選ばれた数字を、
 変数として取得する方法


インターネットで調べているのですが、リストボックスに値を入れるのにもマクロを走らせ
なければならない方法とか、ユーザーフォームでの説明ばかりでなかなか実現に至りません。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …

プログラムのイメージ図としては添付の図の通りです。

どのようにプログラムを書けばいいのでしょうか。

「エクセルVBAでコンボボックス」の質問画像

A 回答 (2件)

添付されている、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の説明されている分を読み替えて使ってみてください。

この回答への補足

回答ありがとうございます。


>Private Sub ComboBox1_Click() 'Comboboxがクリックされたときとなります。

あ、これってもしかしてコンボボックスの右側の下向き三角形を押し、リストがベローんって
出てくるときの動作ですか? 
この動作でリストに入力されるということは、ユーザーから見ればあたかも初めからリストが
入っているように見えるということですね!?

もしそうであれば私が勘違いというか、早とちりしていました。
ちょっと確かめてみます。

補足日時:2011/04/30 20:44
    • good
    • 0
この回答へのお礼

これでできました。
お騒がせしましたが、なんてことはなかったです。


Private Sub ComboBox1_DropButtonClick()
ComboBox1.Clear
ComboBox1.AddItem "りんご"
ComboBox1.AddItem "みかん"
ComboBox1.AddItem "バナナ"
ComboBox1.AddItem "マンゴー"
End Sub

少なくともリストを表示させるためにDropButtonをクリックしなければならないので、
これでマクロが実行されたことになるのですね。

お礼日時:2011/04/30 20:58

こんなのは、コントロールの練習問題の範囲内のことではないですか。


何処がわからないのか。
コマンドボタンで、コンボの値がそのとき(瞬間)の選択されている値が取られる
ボタンのクリックイベントのところにコードを書く。
>リストボックスに値を入れるのにもマクロを走らせなければならない方法
必ずしもあそうではない。エクセルらしいやり方では、プロパティの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照会を活用すべきだ。

この回答への補足

回答ありがとうございます。

リストボックスとなっているところは、コンボボックスの間違いです。すいません。

>プロパティのListFillRangeにセル範囲(例D1:D5など)を直接指定できる。
セル範囲をコンボボックスのリストとして呼び込んできたいのではなく、はじめからコンボボックスのリスト
にリスト化されていることを実現したいのです。入れたいリストはコードのほうに書きます。

コードに書いたリストをコンボボックスのリストに読み込むには、プログラムをいったん走らせなければなりません(少なくとも私の紹介したサイトはそのように書いてあると思います)。これでコンボボックスにリストが入力され、それから選択するのだと思います。

私がやりたいのは、あくまで、はじめからリスト化されている方法です。つまり、エクセルを開くとすでに
コンボボックスにリストが入っていて、好きな数字を選択し、「計算実行」ボタンを押すと計算するプログラムです。

補足日時:2011/04/30 20:32
    • good
    • 0
この回答へのお礼

これでできました。
お騒がせしましたが、なんてことはなかったです。


Private Sub ComboBox1_DropButtonClick()
ComboBox1.Clear
ComboBox1.AddItem "りんご"
ComboBox1.AddItem "みかん"
ComboBox1.AddItem "バナナ"
ComboBox1.AddItem "マンゴー"
End Sub

少なくともリストを表示させるためにDropButtonをクリックしなければならないので、
これでマクロが実行されたことになるのですね。

お礼日時:2011/04/30 20:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!