
すいません、エクセルVBAのユーザーフォームのリストボックスの表示方法について質問があります。
シートのセルに
A列 D列 G列
1行 りんご 赤 120円
2行 みかん 黄 130円
3行 すいか 緑 110円
4行 りんご 赤 160円
. ・・・ ・ ・・・
.
と、50行まで値を入れます。
VBAでユーザーフォームを挿入し、
Private Sub UserForm_Initialize()
With ComboBox1
.AddItem "りんご"
.AddItem "みかん"
.AddItem "すいか"
End With
End Sub
でコンボボックスの値を設定し、次に
Private Sub ComboBox1_Change()
Dim i As Integer
For i = 1 To 50
If Cells(i, 1).Value = ComboBox1.Value Then
With ListBox1
.ColumnCount = 3
.AddItem Cells(i, 1)
End With
End If
Next i
End Sub
このときコンボボックスと同じ値の行について、
リストボックスにA列、D列、G列を表示させるにはどうしたらいいのでしょうか。
例えばコンボボックスで「りんご」を選択したときに、
リストボックスを
りんご 赤 120円
りんご 赤 160円
と表示させたいのですが、
.AddItem Cells(i, 1)
では一列だけしか表示できません。
Rowsorceを使ってみたりしましたが、どうにもうまく出来ませんでした。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
回答2、onlyromOKです。
回答2の、ListBox1_Changeイベントは間違いではありませんが、
以下のようにすると
ListBoxの行をカウントするための変数ListRowが不要になります。
'---------------------------------------
Private Sub ComboBox1_Change()
Dim R As Long
ListBox1.Clear
For R = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(R, "A").Value = ComboBox1.Value Then
ListBox1.AddItem Cells(R, "A").Value
ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(R, "D").Value
ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(R, "G").Value
End If
Next R
End Sub
'----------------------------------------------
また、With ListBox1とWithステートメントを使うとコードが見易くなります。
ありがとうございました。やりたいことがずばり出来ました!
ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(R, "D").Value
のコードを知らなかったので勉強になりました。
またよろしくお願いいたします。
No.2
- 回答日時:
Listプロパティを使用するといいでしょう。
'-------------------------------------------
Private Sub UserForm_Initialize()
With ComboBox1
.Clear
.AddItem "aaa02"
.AddItem "aaa03"
.AddItem "aaa04"
End With
With ListBox1
.Clear
.BoundColumn = 1
.ColumnCount = 3
End With
End Sub
'---------------------------------------
Private Sub ComboBox1_Change()
Dim R As Long
Dim ListRow As Integer
ListBox1.Clear
For R = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(R, "A").Value = ComboBox1.Value Then
ListBox1.AddItem Cells(R, "A").Value
ListBox1.List(ListRow, 1) = Cells(R, "D").Value
ListBox1.List(ListRow, 2) = Cells(R, "G").Value
ListRow = ListRow + 1
End If
Next R
End Sub
'-------------------------------------------
質問では、For i=1 to 50 と最終行が50に固定されてますが、
最終行は自動取得した方がいいでしょう。
また、質問には、ListBoxのBoundColumnメソッドがありませんが
それもいれておかないと。
そしてまた、ListBoxに値をセットする前には必ずListBox1.Clearが必須。
No.1
- 回答日時:
リストボックスのプロパティの設定
UserForm1.ListBox1.RowSource = "Sheet1!A1:G50"
UserForm1.ListBox1.ColumnCount = 7
UserForm1.ListBox1.ColumnWidths = "30,0,0,30,0,0,30"
詳細はヘルプをよく読んでください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
血液検査報告書の「弱乳び」
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
2つの数値のうち、数値が小さい...
-
血液検査の結果が悪くefgrの値...
-
風俗店へ行く前のご飯
-
病院側から早く来てくださいと...
-
小数点以下を繰り上げたものを...
-
excel関数で TRUEやFALSEについて
-
検査結果について電話連絡って...
-
値が入っているときだけ計算結...
-
勃起する時って痛いんですか? ...
-
テスターで断線を調べる方法教...
-
男性に質問 お尻の穴を見せた...
-
検便を取ったのですが、棒から...
-
Excel条件付書式(残業45時間以...
-
MIN関数で空白セルを無視したい...
-
急いでます!病院から患者様へ...
-
Excel 0目標に対して数字があ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
アトピー性皮膚炎
-
コロナになるのが死ぬほど怖い...
-
検便についてです。 便は取れた...
-
24歳、女性です。性欲が強すぎ...
-
未成年の従姉妹が自分の真似絵...
-
頭痛に関する質問です。現在高...
-
血液検査の結果が悪くefgrの値...
-
肝臓がんになりたいです。肝機...
-
何故 削除され続けるか、
-
◎敢えてノンジャンルカテゴリー...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
風俗店へ行く前のご飯
-
2つの数値のうち、数値が小さい...
-
病院側から早く来てくださいと...
-
EXCELで条件付き書式で空白セル...
-
Excel 数値の前の「 ' 」を一括...
-
リンク先のファイルを開かなく...
-
値が入っているときだけ計算結...
おすすめ情報