dポイントプレゼントキャンペーン実施中!

ユーザーフォームのコンボボックスでINDIRECT関数を使うにはどのようにすればいいでしょうか?
Private Sub UserForm_Initialize()
Me.ComboBox1.RowSource = "sheet1!B1:C1"
ComboBox2 = "=INDIRECT(?)"
End Sub

ComboBox1で種類のリストが表示され、選んだ項目により
ComboBox2のリストが表示されるようにしたいのですが
うまくいきません。

  1   2    3    4
A 種類 果物   野菜
B 果物 りんご  たまねぎ
C 野菜 いちご  ピーマン
D    みかん  レタス   (すべて名前を定義しています。)

VBAでINDIRECT関数を使うにはどのようにすればよいでしょうか?

A 回答 (2件)

質問の表は、行列が逆になってます。

。(^^;;;
 

___A____B____C___
1_種_類__果_物__野_菜__
2_果_物__りんご__ハクサイ_
3_野_菜__みかん__ダイコン_
4______ばなな__キャベツ_

 
Combo1の範囲=(A2:A3)
 
(名前)
果物=(B2:B4)
野菜=(C2:C4)
 
 
'---------------------------------------
 
Private Sub UserForm_Initialize()
 ComboBox1.RowSource = "Sheet1!A2:A3"
End Sub
'---------------------------------------
 
Private Sub ComboBox1_Change()
 ComboBox2.List = Sheets("Sheet1").Range(ComboBox1.Value).Value
End Sub
'---------------------------------------
 

●Combobox2でRowSourceプロパティを使う場合は
 
ComboBox2.RowSource = "Sheet1!" & Sheets("Sheet1").Range(ComboBox1.Value).Address
 
以上です。
 
    • good
    • 0
この回答へのお礼

行列逆でしたね…(汗)
さっそくにご回答ありがとうございました。
うまくいきました!!

お礼日時:2010/10/05 15:43

>VBAでINDIRECT関数を使うにはどのようにすればよいでしょうか?



VBAでINDRECT 関数など使う必要などないはずですが……。一体、どうお使いになるつもりなのか、見当も付きません。名前で使うなら、Range(名前)にすればよいですが、VBAとしては、危ない使い方です。(と書くと、また、ここの掲示板では、困った方がいらっしゃって、屈強に反発される人もいますが、VBAと名前定義は相性が良くないのです。まあ、トラブルにあわなければ、めぐり合うまではどうでもよいことですが。)

たぶん、入力規則の「リスト」の方法を、このコンボボックスで実現したいようですが、VBAは、ワークシートの処理の延長上ではありませんから、考え方を変えたほうがよいと思います。

Private Sub UserForm_Initialize()
 Dim c As Range
 ComboBox1.RowSource = "Sheet1!A2:A3"
End Sub

Private Sub ComboBox1_Change()
Dim Rng As Range
Dim i As Long
Set Rng = Worksheets("Sheet1").Range("B2:C4")
i = ComboBox1.ListIndex
If i > -1 Then
 ComboBox2.Value = "" '特に気にならなければここは不要です。
 ComboBox2.RowSource = Rng.Columns(i + 1).Address
End If
End Sub
    • good
    • 0
この回答へのお礼

入力規則のリストの方法を、コンボボックスで実現するには全く考え方が違うのですね。勉強になりました。
ご丁寧にありがとうございました。

お礼日時:2010/10/05 15:45

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