[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コンボボックスの連携』(yuuki11)
VBA初心者です。コンボボックスの絞り込みの使い方について教えてください。
ユーザーフォームのコンボボックス1に都道府県を表示させ、選択した都道府県の市をコンボボックス2に表示させたいのですがどうすれば良いでしょうか。都道府県などの情報は別ブック(データ.xlsx)のJ列(都道府県)とK列(市)に入っています。それを選択して、出てきたデータをリストボックス1に表示させたいのですが……。過去の質問などを漁ってみたのですが、
A列 B列 C列 …
北海道 札幌 青森
青森 函館 八戸
岩手 千歳 弘前
こういう風に、市別に分かれておらず、
J列 K列
4 北海道 札幌
5 北海道 函館
6 青森 弘前
・・・
という風に、K列にいろんな市が入り混じっている状態です。この場合、どのようにして検索をかけたら良いのでしょうか。コンボボックス1で選択した都道府県名を元に、J列でVLOOKUPを使って…と一度は考えたのですが、一行しか取り出せず、また振り出しに戻ってしまいました。
同じワークシートではは出来るんですが、これを別ブックから、しかもいろんな市が入り混じってる状態となるとうまくいきません。。
Worksheets("Sheet1").Select
For i=1 To Cells(Rows.Count, 1).End(xlUp).Row
i=1
ComboBox1.AddItem Cells(i, 1).Value
Next i
End Sub
Private Sub ComboBox1_Change()
ComboBox2.Clear
Worksheets("Sheet1").Select
myCol = ComboBox1.ListIndex + 2
For i=1 To Cells(Rows.Count, myCol).End(xlUp).Row
ComboBox2.AddItem Cells(i, myCol).Value
Next
End Sub
ご存知の方、どうか宜しくお願いします。
< 使用 アプリ:、使用 OS:Windows7 >
Private Sub UserForm_Initialize() Dim i As Long
With Sheets("Sheet2") For i = 1 To .Cells(.Rows.Count, "J").End(xlUp).Row ComboBox1.Text = .Cells(i, "J").Value If ComboBox1.ListIndex < 0 Then ComboBox1.AddItem .Cells(i, "J").Value End If Next i End With End Sub
Private Sub ComboBox1_Change() Dim i As Long
ComboBox2.Clear
With Sheets("Sheet2") For i = 1 To .Cells(.Rows.Count, "J").End(xlUp).Row If ComboBox1.Text = .Cells(i, "J").Value Then ComboBox2.Text = .Cells(i, "K").Value If ComboBox2.ListIndex < 0 Then ComboBox2.AddItem .Cells(i, "K").Value End If End If Next i End With End Sub (???) 2015/04/23(木) 15:08
あと、些細な事なのですが、「ご存知の方…」というお願いの仕方は好ましくないです。プログラム系の回答の場合、
調べて、試して、そして回答しているのであって、知っているから即答している、というわけではないので。
(???) 2015/04/23(木) 15:21
厚かましいことを承知でもう一つお伺いしたいことがあるのですが、2つのコンボボックスで絞り込んだデータをリストボックス1に表示させたいのですが、コンボボックスをもとに、というのがうまくいきません。どのように改変すれば良いでしょうか。
データはデータ.xlsxのデータ表シートに入っています。出てきたデータをB列にある商品名をリストボックスに入れたいと思っています。
Workbooks.Open Filename : = "データ.xlsx"
Ecell = Workbooks("データ.xlsx").Worksheets(1).Range("B50").End(xlUp).Row
For i = 1 To Ecell
With ListBox1
.AddItem
.List(i - 1) = Workbooks("データ.xlsx").Worksheets(1).Cells(i, 2)
End With
Next i
(yuuki11) 2015/04/23(木) 16:10
シートの1番目は、ComboBox2の内容を作成する際に参照したシートと同一ですかね?
Private Sub ComboBox2_Change() Dim i As Long
ListBox1.Clear
With Workbooks("データ.xlsx").Sheets(1) For i = 1 To .Cells(.Rows.Count, "J").End(xlUp).Row If ComboBox1.Text = .Cells(i, "J").Value And _ ComboBox2.Text = .Cells(i, "K").Value Then ListBox1.AddItem .Cells(i, "B").Value End If Next i End With End Sub (???) 2015/04/23(木) 18:44
横から失礼します。
仮に都道府県や市と呼んでおられる項目とB列の商品と呼んでおられる項目との関係なんですが ・同じシートですか(???さんからも同様のコメントがありましたけど) ・で、それをリストボックスに表示するということは、J列の市と呼んでおられる項目は、ユニークではなく 同じものが複数存在するということですね? で、ComboBox2には、それらをユニークにして表示するんですね?
ちなみに、データ.xlsx が保存されているフォルダはどこですか? マクロブックと同じフォルダですか?
(β) 2015/04/24(金) 07:09
別案です。 データ.xlsxはマクロブックと同じフォルダに保存されているという前提。 本来なら、Workbook_Openあたりで開いておくのがいいと思いますが、ここではユーザーフォームのInitializeで開いています。 ですから、ユーザーフォームの表示の際、ちょっと時間がかかる可能性もあります。
8:12 不要コードを1行削除(実害はありませんが) 8:28 実害はめったにないけど、不具合で鵜r可能性があるところを変更。
Option Explicit
Dim Dic As Object Dim stp As Boolean
Private Sub UserForm_Initialize() Dim sh As Worksheet Dim c As Range Dim pre As String Dim cty As String Dim com As String Application.ScreenUpdating = False Set Dic = CreateObject("Scripting.Dictionary") Set sh = Workbooks.Open(ThisWorkbook.Path & "\データ.xlsx").Sheets(1)
For Each c In sh.Range("J1", sh.Range("J" & Rows.Count).End(xlUp)) pre = c.Text cty = c.EntireRow.Range("K1").Text com = c.EntireRow.Range("B1").Text If Not Dic.exists(pre) Then Set Dic(pre) = CreateObject("Scripting.Dictionary") End If If Not Dic(pre).exists(cty) Then Set Dic(pre)(cty) = CreateObject("Scripting.Dictionary") End If Dic(pre)(cty)(com) = True Next
sh.Parent.Close False ComboBox1.List = Dic.keys
End Sub
Private Sub ComboBox1_Change() ListBox1.Clear stp = True ComboBox2.Clear If ComboBox1.ListIndex > -1 Then ComboBox2.List = Dic(ComboBox1.Value).keys stp = False End Sub
Private Sub ComboBox2_Change() If stp Then Exit Sub ListBox1.Clear If ComboBox2.ListIndex < 0 Then Exit Sub ListBox1.List = Dic(ComboBox1.Value)(ComboBox2.Value).keys End Sub
(β) 2015/04/24(金) 07:22
データブックのシート1から全て参照しています。J列K列B列というのは全て同じシートです。
データブックが保存されているのはこのマクロ表と同じフォルダに格納されています。
お二方共、とても丁寧でわかりやすく助かりました。三日ほど悩んでいたのですが漸く一歩進むことができました!ありがとうございました。
(yuuki11) 2015/04/24(金) 09:55
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.