|
こんにちは、
似たような質問ですので
返信にて質問させて下さい。
VBA初心者です。宜しくお願いします。
ユーザーフォームを作り、そこにコンボボックス1、
コンボボックス2を作ります。
シート1にコンボボックス1で都道府県名を選択し、
コンボボックス2で、1で選択した都道府県の「区市郡」
を選択できるようにします。
A B C D
1 東京都 渋谷区 10000人 14000人
2 東京都 新宿区 20000人 25000人
3 東京都 港区 50000人 55000人
4 茨城県 水戸市 20000人 20000人
5 茨城県 つくば市 25000人 25000人
6 茨城県 ひたちなか市 20000人 15000人
. . .
. . .
. . .
シート2の任意のセルを選択するとフォームが表示されて
シート1で選択したコンボボックス1、コンボボックス2で
1で選択した都道府県の「区市郡」を
記入しコンボボックス2で選択した区市郡の人口 C、Dを
合わせて貼り付けたいのです。
シート2のA6を選択し、コンボボックス1−東京、
コンボボックス2−港区を選択した場合はこのようにしたいです。
A B C D
1
2
3
4
5
6 東京都 港区 50000人 55000人
宜しくお願いします。
>
>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列の重複なしデータの抽出は、他にも方法がありそうですよ。
|
|