|
▼EBA さん:
こんにちは。
>またまたお世話になります。
>Excel VBA初心者です。
>早速質問なのですが、シート1に下のようなリストがあるとします。
>
> A B
>1 東京都 渋谷区
>2 東京都 新宿区
>3 東京都 港区
>4 茨城県 水戸市
>5 茨城県 つくば市
>6 茨城県 ひたちなか市
>. . .
>. . .
>. . .
>
>ユーザーフォームを作り、そこにコンボボックス1、
>コンボボックス2を作ります。
>コンボボックス1で都道府県名を選択し、
>コンボボックス2で、1で選択した都道府県の「区市郡」
>を選択できるようにするにはどうしたらよいのでしょう。
>どなたかご教授お願いいたします。
A列が全て空白だった場合のエラー処理をしていませんが、
A列の重複なしのデータを取り出すのにC列をワークで使いました。
他の列が都合がよければ変更してください。
当該フォームモジュールに・・・
'===============================================================
Sub set_combo_item(cmb As MSForms.ComboBox, func_str As String)
'input: cmb データをセットするコンボボックス
'input: func_str データ抽出のための関数式
Dim rng As Range
Dim rng2 As Range
Dim rng3 As Range
With ThisWorkbook.Worksheets(1)
Set rng = .Range("a1", .Range("a65536").End(xlUp))
End With
rng.Offset(0, 2).Formula = func_str
rng.Offset(0, 2) = rng.Offset(0, 2).Value
Set rng2 = rng.Offset(0, 2).SpecialCells(xlCellTypeConstants)
cmb.Clear
For Each rng3 In rng2
cmb.AddItem rng3.Value
Next
cmb.ListIndex = 0
rng2.Value = ""
Set rng = Nothing
Set rng2 = Nothing
Set rng3 = Nothing
End Sub
'==============================
Private Sub ComboBox1_Change()
Dim func_str As String
func_str = "=if(a1=""" & ComboBox1.Text & """,b1,"""")"
Call set_combo_item(ComboBox2, func_str)
End Sub
'==========================================================
Private Sub UserForm_Initialize()
Dim func_str As String
func_str = "=if(countif($a$1:a1,a1)>1,"""",a1)"
Call set_combo_item(ComboBox1, func_str)
func_str = "=if(a1=""" & ComboBox1.Text & """,b1,"""")"
Call set_combo_item(ComboBox2, func_str)
End Sub
A列の重複なしデータの抽出は、他にも方法がありそうですよ。
|
|