- ベストアンサー
エクセルVBAについて質問です。
エクセルVBAについて質問です。 シート1のユーザーフォームにコンボボックスとテキストボックスが各1つずつ、 シート2のA列には1行目から順に「あ」「い」「う」と文字が入っていて、B列には「1」「2」「3」と値が入っています。 コンボボックスのリストにはシート2のA列の文字が選択できる状態にあります。 この状態で、例えばコンボボックスで「い」を選んだら、テキストボックスに自動的に「2」と入る、というように、コンボボックスのリストの中から任意の文字を選択したときに、テキストボックスにB列の値が入るようにするにはどのようにすればいいのでしょうか?よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1,2,3です。 再補足です。 コンボボックスのRowSourceプロパティを Sheet2!A1:B5 に初期化しておいて、 コンボボックスのColumnCountプロパティーを 1 にしておいて、 コンボボックスのBoundColumnプロパティーを 2にしておけば、 Private Sub ComboBox1_Change() TextBox1.Text = ComboBox1.Value End Sub でいけます。 このとき、 TextBox1.Text = ComboBox1.Text TextBox1.Text = ComboBox1.Column(0) TextBox1.Text = ComboBox1.Column(1) がどういう値を返すか調べてみると面白いと思います。 参考ページを紹介します。
その他の回答 (3)
- ka_na_de
- ベストアンサー率56% (162/286)
#1,2です。 補足です。 コンボボックスのColumnCountプロパティーを1にして おいてください。 2にすると、リストにA列B列の2列が表示されます。
- ka_na_de
- ベストアンサー率56% (162/286)
質問の内容を勘違いしていました。 コンボボックスのRowSourceプロパティを Sheet2!A1:B5 に初期化しておいて Private Sub ComboBox1_Change() TextBox1.Text = ComboBox1.Column(1) End Sub でどうでしょうか?
- ka_na_de
- ベストアンサー率56% (162/286)
おはようございます。 これでどうですか? Private Sub ComboBox1_Change() TextBox1.Text = ComboBox1.Value End Sub 尚、記述場所は標準モジュールではありません。 VBEでユーザーフォームの編集画面において、 コンボボックスをダブルクリックしてください。 Private Sub ComboBox1_Change() End Sub が出てくると思います。 編集中のコンボボックス上で右クリック→「コードの表示」 でも構いません。
補足
前回に引き続き回答ありがとうございます。 TextBox1.Text = ComboBox1.Value ということですが、これだとただコンボボックスで選んだものをテキストボックスに反映させているだけになってしまいます。コンボボックスで選んだ文字が書かれているセルの右側のセルの値をテキストボックスに反映させたいのです。しかもシートが違うので、 「sheets2.~」のようなコードの組み方をしなければならないとは思うのですが…どうでしょうか?
お礼
いろいろ自分でためしていたら、なんとかできました! TextBox1.Text = ComboBox1.Column(0) TextBox1.Text = ComboBox1.Column(1) もためしたところ、どのような動きをするのか分かりました。一つの動作を作るのにもいろいろなやり方があるなぁと改めて痛感しております。 丁寧な説明ほんとうにありがとうございましたm(__)m
補足
丁寧な回答ありがとうございます。 コードを組むことしか頭になく、プロパティをいじるという考えが全くなかったので、プロパティだとこんなに簡単にできるんだ、と驚きです。 最後にもう一点だけ質問があります。回答される方が答えやすいように、一番簡単な形で質問をしたために出てきた問題です。 RowSourceプロパティの部分ですが、シート2の文字や値は別のユーザーフォームを使って書き込む形にしています。書き込む箇所はデータがある行の一つ下の行です。従って新しい文字・値が無制限に増えていくような仕様になっているのですが、その場合「Sheet2!A1:B5」のような書き方だと対応できません。どのような書き方をすればよいでしょうか?差し支えなければ回答して下さるとありがたいです。