[[20160924203551]] 『コンボボックスの値に応じてテキストボックスの値』(フィロ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『コンボボックスの値に応じてテキストボックスの値を取得』(フィロ)

お世話になります。
調べても(検索のやり方が悪いからなのか)納得行くものが
得られなかったので質問させて頂きます。

UserFormのコンボボックスから値を選択 ←ここまでは出来てます。
値を選択後、それに紐付けられる値をテキストボックスに表示(入力)したいです。

例えば以下のようになります。

「酒」を選択後、そのコード番号である「1」をテキストボックスに反映させたい。
同様に、「フード」を選択後、「2」という具合です。

なお、コンボボックスのデータはシートから参照しており、その項目数は15程度あります。
その点も考慮して何かいい方法などありましたら、併せてご教授頂ければ幸いです。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


補足です。

if文で出来る事は確認済みです。
しかしながら、項目数が多いという点で困っております。
何かいい方法はありませんでしょうか?

Private Sub cbShu_Change()

    If frmHinshu.cbShu.Value = "酒" Then
    tbCode.Value = "1"
    End If

End Sub
(フィロ) 2016/09/24(土) 20:52


 Changeイベントは、扱いにくいのでやめたほうがいいのですが、それはさておき。

 アップされたような構えだと If文を15個ほど書かなければいけませんね。
 将来、項目の追加・削除・変更があれば、その都度、コードをいじらなければいけないですねぇ。
 これは、絶対に避けるべきです。

 現在のシートの 例えば 酒 のデータ(行)のどこかに 1 といったコードを記入した列はないのでしょうか。
 もし、ないのであれば、追加してでも、そういった列を設けましょう。

 で、ComboBox には (表示は1列でも)その2列の内容を登録しておき、選択されれば、そのリスト内のコード列を参照します。

 あるいは、ComboBox ではなく ListBox にして、表示を2列にしておけば、わざわざ tbCode というTextBox を作らなくてもいいと思います。

 いずれにしても、具体的なお手伝いが必要なら

 ・シートのレイアウト
 ・ユーザーフォームでCOmboBoxのリストをセットしている部分のコード

 この2つが知りたいですね。

(β) 2016/09/24(土) 21:16


ここなどに目を通してみて、使えそうだと思えば試してはどうでしょうか。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform05.html

(マナ) 2016/09/24(土) 21:24


仰る通りです。
冗長的過ぎて素人目から見てもおかしいと感じてます。

DATAシートにリスト項目を入れ、コンボボックス等では参照しています。
従って、酒の隣行に項目を入れる事は可能な状態です。

今回のUserFormに記入されたデータを下に示すように、セル別に反映させたいのです。
シートは、3列構成です。

種類 | コード | 名称

'----------------------------------------------------------------------------------------

 Private Sub UserForm_Initialize()
    ' DATAシートからコンボボックスにデータを反映

    With Worksheets("DATA")

        cbShu.List = .Range("F2", .Range("F" & Rows.Count).End(xlUp)).Value

    End With

 End Sub
'----------------------------------------------------------------------------------------
(フィロ) 2016/09/24(土) 21:40

 シートの 種類、コード、名称 は、それぞれ、どの列ですか?

 現在、F列をコンボボックスのリストにしていますが、これは 種類 ですか 名称ですか?

(β) 2016/09/25(日) 00:18


 上記質問の回答をもらってからのほうがいいかと思いますが、推測で。
 種類が F列。隣のG列にコード番号が記載されているという前提です。

 Private Sub UserForm_Initialize()
    With Sheets("DATA")
        cbShu.List = .Range("F2", .Range("F" & Rows.Count).End(xlUp)).Resize(, 2).Value
    End With
 End Sub

 Private Sub cbShu_Change()
    tbCode.Value = ""
    If cbShu.ListIndex < 0 Then Exit Sub    '未選択・入力途中
    tbCode.Value = cbShu.List(cbShu.ListIndex, 1)
 End Sub

(β) 2016/09/25(日) 00:35


βさん
返信が遅れたことお詫びします。
βさんの推測通り、提示していただいたコードで無事に動作確認が取れた事を報告します。

途中のマナさんから頂いたリンクも有益に使わさせて頂いたのですが、
コンボボックスへの2列表示の問題など(参照は出来るが、選択時には1列いずれか問題)などの壁に当たりました。
しかしながら、素人の思考でも理解し易い内容であったことから大きな感謝です。

βさんからの提供コードを参考にまた1つ前進出来そうです。
動作は出来てるが理解出来ない構文もあるので、調べながら進めていきたい所存です。

御二方、誠に有難うございました。
P.S. 当該サイトは募金システムとかないのでしょうか。どこにこの感謝を表現すれば...

(フィロ) 2016/09/25(日) 18:36


 推測があたって、よかったです。

 >>どこにこの感謝を表現すれば

 いずれ、フィロさんが、この学校サイトで、回答者として活躍される、それが 学校への貢献になると思います。

(β) 2016/09/25(日) 18:48


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.