プロが教えるわが家の防犯対策術!

VBA初心者です。
どうしても分からないので、分かる方教えていただけませんか?
現在、ユーザーフォームを利用して見積作成フォームを作成しております。
画像のように、コンボボックス・テキストボックスが20行ほど並びます。
やりたい事は、
①コンボボックスの値は商品名や単価が変化することがありますので、出来ればSheet1(商品)から取り出したい。
②コンボボックスには、Sheet1(商品)のA列(商品名)C列(単価)の2列を表示したい。
③コンボボックスで商品名を選択したら、自動で在庫用テキストボックス・単価用テキストボックス・備考用テキストボックスすべてに、Sheet1(商品)の内容が入力されるようにしたい。

上記のようなことは可能なのでしょうか?
いろいろと調べてコードを何回も書いてみましたが、自分の力では出来ませんでした。
どなたか、上記が出来るコードを教えていただけませんでしょうか?
よろしくお願いいたします。

「VBA 複数列コンボボックス 値の取り出」の質問画像

A 回答 (5件)

No.3 の訂正です。

誤動作はしないと思いますが念の為
-----------------------------------------------------
ComboBox1.Value = .Cells(行, 1)
TextBox1.Value = .Cells(行, 2)
TextBox2.Value = .Cells(行, 3)
TextBox3.Value = .Cells(行, 4)
-----------------------------------------------------

-----------------------------------------------------
ComboBox1.Value = .Cells(行, 1).Value
TextBox1.Value = .Cells(行, 2).Value
TextBox2.Value = .Cells(行, 3).Value
TextBox3.Value = .Cells(行, 4).Value
-----------------------------------------------------
に直しておいてください。
    • good
    • 0
この回答へのお礼

本当にありがとうございました。
思った通りのコンボボックスが出来上がりました。
また、何かあったらよろしくお願いします。

お礼日時:2017/10/01 10:29

No.3 の追補



このサイトはどうも複数の連続したスペースを1つのスペースにしてしまうようです。
「ComboBox1.AddItem .Cells(行, 1).Value & " " & Format(.Cells(行, 3).Value, "\\#,##0;-\\#,##0")」の「" "」の部分のスペースを見やすいように適当にふやしてみてください。
    • good
    • 0

No.1 のお礼について



「コンボボックス表示の際にwidthか何かで区切れないでしょうか?」は「& " " &」でスペースで区切っているのですが…

それも含めて改造案です。
☆ 標準モジュールに以下のようにパブリック変数を定義しておきます。
-----------------------------------------------------------------------------------------
Public 行 As Long
Sub test()
UserForm1.Show
End Sub
-----------------------------------------------------------------------------------------
☆ フォームには
-----------------------------------------------------------------------------------------
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex < 0 Then Exit Sub
行 = ComboBox1.ListIndex + 2
Application.EnableEvents = False
With Sheets("Sheet1")
ComboBox1.Value = .Cells(行, 1)
TextBox1.Value = .Cells(行, 2)
TextBox2.Value = .Cells(行, 3)
TextBox3.Value = .Cells(行, 4)
End With
Application.EnableEvents = True
End Sub
-----------------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
With Sheets("Sheet1")
For 行 = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
ComboBox1.AddItem .Cells(行, 1).Value & " " & Format(.Cells(行, 3).Value, "\\#,##0;-\\#,##0")
Next
End With
End Sub
-----------------------------------------------------------------------------------------
    • good
    • 0

No.1 の追補



この仕様だと「コンボボックス・テキストボックス」ではなく、書き込みの出来ない「リストボックス・ラベル」の方が良いのでは?
    • good
    • 0

こんな事でしょうか?



-------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
Dim 行 As Long
With Sheets("Sheet1")
For 行 = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
ComboBox1.AddItem .Cells(行, 1).Value & " " & .Cells(行, 3).Value
Next
End With
End Sub
-------------------------------------------------------------------------------
Private Sub ComboBox1_Change()
With Sheets("Sheet1")
TextBox1.Value = .Cells(ComboBox1.ListIndex + 2, 2)
TextBox2.Value = .Cells(ComboBox1.ListIndex + 2, 3)
TextBox3.Value = .Cells(ComboBox1.ListIndex + 2, 4)
End With
End Sub
-------------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
1つ、コンボボックス内にはA列(商品名)C列(単価)を表示したいのですが、選択した際には、コンボボックス内はA列(商品名)だけの値にしたいです。それと、コンボボックス表示の際にwidthか何かで区切れないでしょうか?
2列表示するのは、自分が単価も確認したいためだけのものです。

お礼日時:2017/09/29 15:13

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

このQ&Aを見た人はこんなQ&Aも見ています