電子書籍の厳選無料作品が豊富!

またお世話になります。都道府県から市を選択するとその詳細を表示させたいのですが、「‘ここでエラーが出る」のところでエラーがでます。
「詳細」のシートには都道府県を入力したセルに名前を付け、市を入力したセルにも市ごとに名前を付けました。都道府県を選択し、市を選択するとエラーが出ます。
説明が足りないかとは思いますが、どなたか教えてください。
以下、入力したセルです。
   A    B    C   D
1 北海道  赤平市  リンゴ ミカン
2 青森   阿寒郡  ブドウ モモ
3 岩手   旭川市  イチゴ 

以下、今の現状です。

Private Sub UserForm_Initialize() ’都道府県を選択
Me.ComboBox1.RowSource = "都道府県"
Me.ListBox2.RowSource = ""
End Sub

Private Sub ComboBox1_Change() ‘都道府県が選択されたらリストボックス2に市を表示させる
Me.ListBox2.Value = ""
Me.ListBox2.RowSource = Me.ComboBox1.Value
End Sub

Private Sub ListBox2_Click() 'リストボックス2に表示された市を選択すると詳細をテキストボックス7に表示させる
Dim r As Long
With ListBox2
If .ListIndex > -1 Then
r = .List(.ListIndex, 1) = 0  ‘ここでエラーが出る
TextBox7.Value = Worksheets("詳細").Cells(r, 3) '
TextBox8.Value = Worksheets("詳細").Cells(r, 4) '
End If
End With
End Sub

A 回答 (4件)

それでしたらBからDまでをリストボックスに登録して


表示は1列のみ(列幅を例えば2;0;0)とすればよいのでは。

TextBox7.Value = .List(.ListIndex, 1)
TextBox8.Value = .List(.ListIndex, 2)
    • good
    • 0

ComboBox1_Changeの


Me.ListBox2.RowSource = Me.ComboBox1.Value
でリストボックスにはコンボボックスで選択したものを設定しているだけなので、リストボックスは1件を選択することになります。
なので.ListIndexは0しか取りえません。
コンボボックスのListIndexを使えば希望の値は取れると思います。
r = 2 + Me.ComboBox1.ListIndex
が、結局都道府県さえ決まればそれ以降は自動的に値は決まるのでリストボックスは必要ないのではないでしょうか。

この回答への補足

説明不足でした。すみません。
表はA列に都道府県の一覧、B列にはそれぞれの市が一覧となっています。
ComboBox1で選んだ都道府県が、ListBox2に表示され、市を選ぶとC列とD列の値がTextBox7とTextBox8に表示されるというものです。
A列の47都道府県には「都道府県」という名前を付け、B列には都道府県ごとに市の名前を付けています。

以下表のサンプルです。

   A     B      C      D
1 北海道   赤平市   りんご  ぶどう
2 青森    阿寒郡   みかん  もも
3 岩手    旭川市   バナナ  トマト
4 宮城     ・
5 秋田     ・
6  ・      ・
7  ・      青森市   きゅうり  なすび
8  ・      上北郡   大根    キクナ
9  ・         ・
10 ・         ・

以下今の現状です。

Private Sub UserForm_Initialize()
Me.ComboBox1.RowSource = "都道府県"
Me.ListBox2.RowSource = ""
End Sub

Private Sub ComboBox1_Change()
Me.ListBox2.Value = ""
Me.ListBox2.RowSource = Me.ComboBox1.Value
End Sub

Private Sub ListBox2_Click()
Dim r As Long
With ListBox2
If .ListIndex > 0 Then
r = .List(.ListIndex, 0)
TextBox7.Value = Worksheets("詳細").Cells(r, 4)
TextBox8.Value = Worksheets("詳細").Cells(r, 5)
End If
End With
End Sub

本当に初心的な質問ですみません、何度もお返事いただいておりますが上手くいきません。どうかもう一度お返事宜しくお願いいたします。

補足日時:2009/02/25 09:48
    • good
    • 0

Listプロパティのcolumn(rowも)は0から始まります。


.List(.ListIndex,0)で選択した市が取得されます。
位置のみなら.ListIndexでかまいません。
r = 2(開始位置) + .ListIndex とすればよいかと思います。
(またはそのままOffsetとして利用するかです。)

この回答への補足

すみません。
無事に動いたと思いましたが、
開始位置を指定したところ(北海道)だけが反映して、
次の(青森)を選択しても同じ(北海道)のセルが反映されます。
本当にすみませんが、もう一度説明をお願いいたします。
また、Offsetを利用した方法も出来ればご説明お願いいたします。
以下、変更後です。

If .ListIndex > -1 Then
r = 2 + .ListIndex
TextBox7.Value = Worksheets("詳細").Cells(r, 3) '

間違っているでしょうか(汗)

補足日時:2009/02/20 22:45
    • good
    • 0
この回答へのお礼

ありがとうございます。
無事に表示されました。
また、機会があれば宜しくお願いいたします。

お礼日時:2009/02/20 17:16

どのようなエラーが表示されるのでしょう?



rには 0か -1 のどちらかが格納されますが これは意図した値でしょうか

Cellsの引数に 0や -1では エラーになりそうですが ・・・

この回答への補足

お返事ありがとうございます。
エラー表示は、
「Listプロパティの値を取得できません。引数が不正です。」
とでます。
r = .List(.ListIndex, 1)=0

r = .List(.ListIndex, 1)
に変えて見ましたが同じでした。

以前によく似たものを教えてもらったので、それを参考にやっているのですが、「List」の使い方が良くわかりません。
すみませんが、お返事宜しくお願いいたします。

補足日時:2009/02/20 08:30
    • good
    • 0

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