|
ichinoseさまに教えていただいたところまでは、理解できたので、
次に進んでいるのですが、
さらに、悩むところが出てきましたので質問させてください。
前の表に追加事項を加え、次の表に変更しました。
A B C
1 東京都 渋谷区 1丁目
2 東京都 世田谷区 2丁目
3 東京都 新宿区 3丁目
4 東京都 4丁目
5 東京都 5丁目
6 東京都 6丁目
7 茨城県 つくば市 1丁目
8 茨城県 水戸市 2丁目
9 茨城県 ひたちなか市
. . .
. . .
. . .
そして、フォームにコンボボックス3を配置して
C列のデータを表示させ、コマンドボタンをクリックすると
シート2にデータを書き込むみます。
そのコードは次のとおりです。
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, 3).Formula = func_str
rng.Offset(0, 3) = rng.Offset(0, 3).Value
Set rng2 = rng.Offset(0, 3).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)
func_str = "=if(a1=""" & ComboBox1.Text & """,c1,"""")"
Call set_combo_item(ComboBox3, 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)
func_str = "=if(a1=""" & ComboBox1.Text & """,c1,"""")"
Call set_combo_item(ComboBox3, func_str)
End Sub
Private Sub InputBtn_Click()
'変数の宣言
Dim CelPos As Integer
Dim CelNo As String
Set WS = Worksheets(2)
Do
CelPos = CelPos + 1
CelNo = "A" & CelPos
Rtn = WS.Range(CelNo).Value
Loop While Rtn <> ""
CelNo = "A" & CelPos
WS.Range(CelNo) = UserForm1.ComboBox1.Text
CelNo = "B" & CelPos
WS.Range(CelNo) = UserForm1.ComboBox2.Text
CelNo = "C" & CelPos
WS.Range(CelNo) = UserForm1.ComboBox3.Text
ComboBox1.ListIndex = 0
End Sub
上記のコードで、動作は問題ないのですが....
ただ、コンボボックス1で東京都を選択すると、コンボボックス2には
新宿区の下に0が3行(空白セル分)表示されてしまいます。
また、コンボボックス1で茨城県を選択すると、コンボボックスには
2丁目の下に0が1行表示されます。
この0を削除して空白にするにはどうすればいいのでしょうか?
またまた、長い文章で申し訳ありません。
よろしくお願いします。
|
|