VBA 都道府県から市を選択し詳細を表示させる

このQ&Aのポイント
  • VBAを使用して、都道府県から市を選択するとその詳細を表示させる方法について質問しています。
  • 詳細シートには、都道府県を入力したセルに名前を付け、市を入力したセルにも市ごとに名前を付けています。
  • 現在、都道府県を選択し、市を選択するとエラーが発生している状況です。具体的なエラーメッセージやスクリプトの一部も提供されています。
回答を見る
  • ベストアンサー

VBA 都道府県から市を選択し詳細を表示させる

またお世話になります。都道府県から市を選択するとその詳細を表示させたいのですが、「‘ここでエラーが出る」のところでエラーがでます。 「詳細」のシートには都道府県を入力したセルに名前を付け、市を入力したセルにも市ごとに名前を付けました。都道府県を選択し、市を選択するとエラーが出ます。 説明が足りないかとは思いますが、どなたか教えてください。 以下、入力したセルです。    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

質問者が選んだベストアンサー

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.4

それでしたらBからDまでをリストボックスに登録して 表示は1列のみ(列幅を例えば2;0;0)とすればよいのでは。 TextBox7.Value = .List(.ListIndex, 1) TextBox8.Value = .List(.ListIndex, 2)

その他の回答 (3)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.3

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

shosin999
質問者

補足

説明不足でした。すみません。 表は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 本当に初心的な質問ですみません、何度もお返事いただいておりますが上手くいきません。どうかもう一度お返事宜しくお願いいたします。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

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

shosin999
質問者

お礼

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

shosin999
質問者

補足

すみません。 無事に動いたと思いましたが、 開始位置を指定したところ(北海道)だけが反映して、 次の(青森)を選択しても同じ(北海道)のセルが反映されます。 本当にすみませんが、もう一度説明をお願いいたします。 また、Offsetを利用した方法も出来ればご説明お願いいたします。 以下、変更後です。 If .ListIndex > -1 Then r = 2 + .ListIndex TextBox7.Value = Worksheets("詳細").Cells(r, 3) ' 間違っているでしょうか(汗)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

どのようなエラーが表示されるのでしょう? rには 0か -1 のどちらかが格納されますが これは意図した値でしょうか Cellsの引数に 0や -1では エラーになりそうですが ・・・

shosin999
質問者

補足

お返事ありがとうございます。 エラー表示は、 「Listプロパティの値を取得できません。引数が不正です。」 とでます。 r = .List(.ListIndex, 1)=0 を r = .List(.ListIndex, 1) に変えて見ましたが同じでした。 以前によく似たものを教えてもらったので、それを参考にやっているのですが、「List」の使い方が良くわかりません。 すみませんが、お返事宜しくお願いいたします。

関連するQ&A

  • Excel コンボボックス2つ以上の時のコード

    ユーザーフォームでコンボボックスを2つ作ったのですが、1つだけのときはうまくいったのですが、二つ目をつくったら、エラーが出てしまいました。 コード入力は、Initializeに入力してあります。 Private Sub UserForm_Initialize() ComboBox1.Style = fmStyleDropDownCombo ComboBox1.RowSource = "sheet1!F2:F7" ComboBox1.ListIndex = -1 End Sub Private Sub UserForm_Initialize() ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "sheet2!B2:B3" ComboBox2.ListIndex = -1 End Sub コンボボックス1だけはうまくいったのですが、コンボボックス2をつくったら名前が適切でありませんとエラーがでました。 どのようにしたらいいですか?教えてください。

  • エクセル VBA if構文

    毎度お世話になります。 下記プログラミングですが、 シャーペンまたはボールペンがコンボボックス1で 選択された場合はコンボボックス2で10束または50束の選択肢となり 消しゴムまたはシャー芯がコンボボックス2で 選択された場合はコンボボックス2で100コまたは1000コの選択肢としたいのですが 他の方法がありますでしょうか。 宜しくお願い致します。 If Me.ComboBox1.Value = "シャーペン" Or Me.ComboBox1.Value = "ボールペン" Then ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "" ComboBox2.Clear ComboBox2.AddItem "10束" ComboBox2.AddItem "50束" ComboBox2.ListIndex = -1 End If If Me.ComboBox1.Value = "消しゴム" Or Me.ComboBox1.Value = "シャー芯" Then ComboBox2.Style = fmStyleDropDownCombo ComboBox2.RowSource = "" ComboBox2.Clear ComboBox2.AddItem "100コ" ComboBox2.AddItem "1000コ" ComboBox2.ListIndex = -1 End If

  • エクセル VBAについて。

    Private Sub ComboBox2_Change() On Error Resume Next With Me.ComboBox2 If .ListCount < 0 Then Exit Sub If .Value = "" Then Exit Sub Me.Range("K45").Value = _ Worksheets("マスタ").Range(.List(.ListIndex, 1)).Offset(0, 2).Value Me.Range("K48").Value = _ Worksheets("マスタ").Range(.List(.ListIndex, 1)).Offset(0, 4).Value End With End Sub これをマスタのU列とW列を表示したい場合、どこを変えれば良いのでしょうか? 今はD列とF列が表示されております。

  • VBAコンボボックスの内容が反映されない

    超初心者で、申し訳ございません。下記のようなコードを入力しましたが、 プルダウンは動くのですが、選択することが出来ません。誤りを指摘していただきたく、ご教授の程よろしくお願いします。 Private Sub UserForm_Initialize() With MainForm.ComboBox1 .List = Sheets("data").Range("A2:A11").Value .ListIndex = 0 End With Private Sub ComboBox1_Change() With MainForm.ComboBox1 .List = Sheets("data").Range("A2:A11").Value .ListIndex = 0 End With End Sub

  • エクセルマクロ_上書き(リストボックスでデータを抽出し、その行へ上書き)

    エクセルマクロ初心者です。(2003使用_ユーザーフォーム,リストボックス,テキストボックス,チャックボックス) Sheet1のデータをユーザーフォームへ反映させ、修正したものをその行へ上書きするマクロを作成したいと思っていますが、うまくいかないのでどなたかお教え願います。 (Sheet1―A8より表がはじまります) 管理番号 品名 数量 希望納期 変更数量 完納 コメント アカ12 みかん     40   8月3日 アオ35 りんご     30   8月5日 クロ54 なし     50   7月7日 アカ98 もも     20   9月1日 アオ43 すいか     35   8月3日 ●完納の行がチャックボックスで、チェックがついたら、”完納”と記載、チェックがついていなかったら空欄のまま。もし表に”完納”と記載されていたら、コマンドボタン1でデータを抽出した時に、チェックがつくようにしたいのです。が、まったくうまくいかないのです。 ●また、コマンド1での抽出データに値を入力したものを上書きすることは一部できるのですが、空欄にしたときに、空欄の状態(無記入)に上書きすることができません。 Private Sub UserForm_Initialize() Dim r As Range Set r = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set r = r.Resize(r.Rows.Count - 1) With ListBox1 .ColumnWidths = "50;50;0;0;0;0;0" .ColumnCount = 7 .RowSource = r.Address(A8, G) End With End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex <> -1 Then TextBox1.Value = ListBox1.List(ListBox1.ListIndex, 0) TextBox2.Value = ListBox1.List(ListBox1.ListIndex, 1) TextBox3.Value = ListBox1.List(ListBox1.ListIndex, 2) TextBox5.Value = ListBox1.List(ListBox1.ListIndex, 4) TextBox6.Value = ListBox1.List(ListBox1.ListIndex, 6) End If If Not IsEmpty(ListBox1.List(ListBox1.ListIndex, 3)) Then TextBox4.Value = Format(CDate(ListBox1.List(ListBox1.ListIndex, 3)), "m/d") Else TextBox4.Value = "" End If End Sub Private Sub CommandButton2_Click() If ListBox1.ListIndex <> -1 Then Dim r As Range ' 元データの範囲を取得 Set r = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set r = r.Resize(r.Rows.Count - 1) ' 日付型かどうかをチェック If IsDate(TextBox4.Value) Then ' 選択されたセルの更新 r(ListBox1.ListIndex + 1, 4) = TextBox4.Value End If r(ListBox1.ListIndex + 1, 7) = TextBox6.Value End If End Sub Private Sub CheckBox1_Click() If ListBox1.ListIndex <> -1 Then Dim l As Range Set l = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set l = l.Resize(l.Rows.Count - 1) If CheckBox1.Value = True Then l(ListBox1.ListIndex + 1, 5).Value = "完納" If CheckBox1.Value = False Then l(ListBox1.ListIndex + 1, 5).Value = "<>" End If End If End If End Sub すみませんが、ご親切に教えていただけましたら幸いです。 よろしくお願いいたします。

  • VB リストボックス選択項目が取得できない。

    エクセルのユーザフォームで日程表を作っています。 下記ListBox1で会議名称だけ表示させています(チェックボックス無し)。 Private Sub ListBox1_click()で選択さした項目を、ここではあらかじめ結合したF5、F6セルに入力させたいのですが、なにも入力されません。 また、ウォッチウインドゥで cとListIndexとListBox1.Valueを設定し、実行後に見るとListIndex 2、ListBox1.Value : "責任者会議"とそれなりに表示されますが、cはEmptyです。 なぜF5セルと、併せてウォッチウインドゥに変数cが設定されないのでしょうか。教えてください。 Excel 2007 VB6.5です。 '行事入力一覧 Private Sub UserForm_Initialize() With ListBox1 .AddItem "" .AddItem "サービス課会議" .AddItem "責任者会議" .AddItem "安全衛生委員会" .AddItem "ISO委員会"  End With End Sub --------------------------------- Private Sub ListBox1_click() MsgBox ("選択した行事名を「行事等」欄へコピーします。" _ & vbCrLf & vbCrLf & "コピーしたい日付の「行事等」欄をクリックしてください。") Dim ListIndex As Long '選択番号 Dim c As Variant ListIndex = ListBox1.ListIndex With ActiveSheet For i = 0 To -1   c = ListBox1.Value Range("F5").Value = ListBox1.Value ’ Range("F5:F6").MergeCells.Value = ListBox1.Value ’ Cells(5, 6).Value = ListBox1.Value Next i  .Range("G5").Value = "-4A56" 'Test G5とG6の結合セルだが入力される。 End With Stop      ListBox1.Value = ""       Unload Me End Sub

  • リストボックスについて

    リストボックスからデータを転記したいのですが、 実行時エラー"1004"が出てしまい、どうしてもうまくいきません。 どなたか原因を教えてください。 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim i As Long With Worksheets("sheet2") i = .Range("F47").End(xlUp).Row + 1 .Range(i, 6).Value = ListBox1.List(ListBox1.ListIndex, 0) .Range(i, 12).Value = ListBox1.List(ListBox1.ListIndex, 1) .Range(i, 26).Value = ListBox1.List(ListBox1.ListIndex, 2) .Range(i, 28).Value = ListBox1.List(ListBox1.ListIndex, 3) .Range(i, 34).Value = ListBox1.List(ListBox1.ListIndex, 4) .Range(i, 37).Value = ListBox1.List(ListBox1.ListIndex, 5) End With Unload Me End Sub

  • リストボックスから項目を選択してセルに入力したいのです

    EXcel2003でマクロ作成中です。エクセルシートのN列を右クリックすると、ユーザーォームが現れ、その中のリストボックスから項目を選択すると選択文字が白色に反転します。 ユーザーホームの下方に設置した「入力する」ボタンをクリックする、アクティブセルにテキスト文字列が挿入されます。 Option Explicit Private Sub CommandButton1_Click() With ListBox1 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox1.list(ListBox1.ListIndex) End If End With Unload UserForm1 End Sub --------------------------- Private Sub CommandButton2_Click() Unload UserForm1 End Sub ------------------------------ これと同じものをB列につくりました。エクセルシートのB列を右クリックすると、リストボックスが表示されますが、その中の項目を選択しようとすると、一瞬にしてユーザーフォーム自体が消えてしまい項目を 選択できません。 Private Sub CommandButton1_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex) End If End With Unload UserForm2 End Sub ----------------------------- Private Sub CommandButton2_Click() Unload UserForm2 End Sub ------------------------------------------ まったく同じものを作って内容だけかえたのですが、できません。 どうしてでしょうか?ご教授おねがいします。

  • リストボックスで選択した項目に該当するデーターをラベルに表示する

    よろしくお願いします ユーザーフォームにリストボックスが2つ ラベルが1つ 配置しています。 リストボックス1で選択した項目に該当するリストを リストボックス2に表示する。 次に リストボックス2で選択した項目に該当するデーターを ワークシートのセル(E5:E300)から選んで ラベル1に表示する。 このようにしたいのですがエラーが出ます。 Dim LastRow As Long Dim DstRow As Long Const FstRow As Long = 5 Dim MctRow As Long   -  -  - Private Sub UserForm_Initialize() With Me.ListBox1 .RowSource = Worksheets("入力").Range("A5:A300").Address(External:=True) End With End Sub   -  -  - Private Sub ListBox1_Click() Dim j As Integer Dim RowCnt As Long With Worksheets("入力") LastRow = .Range("E300").End(xlUp).Row ListBox2.Clear For RowCnt = 5 To LastRow If ListBox1.List(ListBox1.ListIndex) = .Cells(RowCnt, 3).Value Then ListBox2.AddItem For j = 0 To 1 ListBox2.List(ListBox2.ListCount - 1, j) = .Cells(RowCnt,5 + j).Value Next j End If Next RowCnt End With End Sub   -  -  - Private Sub ListBox2_Click() Dim SrcCode As Long SrcCode = ListBox2.List(ListBox2.ListIndex, 0)     ↑    ↑    ↑ ここでエラーになります。 実行時エラー 型が一致しません と表示されます With Worksheets("入力") LastRow = .Range("E300").End(xlUp).Row MctRow = Application.WorksheetFunction.Match(SrcCode, .Range("E5:E" & LastRow), 0) + 5 Label1 = Format(.Cells(MctRow, 5)) End With End Sub

  • リストボックスで選択した一行を一度にセルに入力したい

    Xcel2003でマクロ作成中です。以下のコードで、リストボックスで一行を選択しました。この選択した一行のデータのうち2個のデータをC列とD列に入力することができました。が、E列にもデータを入力したいのです。が色いろやってみましたができません。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.list(ListBox2.ListIndex, 1) End If End With Unload UserForm3 End Sub 上のコードにどう追加記入したらよろしいでしょうか?

専門家に質問してみよう