|
▼ととりん さん:
こんばんは。
>ichinoseさまに教えていただいたところまでは、理解できたので、
>次に進んでいるのですが、
>さらに、悩むところが出てきましたので質問させてください。
>
>前の表に追加事項を加え、次の表に変更しました。
> A B C
>1 東京都 渋谷区 1丁目
>2 東京都 世田谷区 2丁目
>3 東京都 新宿区 3丁目
>4 東京都 4丁目
>5 東京都 5丁目
>6 東京都 6丁目
>7 茨城県 つくば市 1丁目
>8 茨城県 水戸市 2丁目
>9 茨城県 ひたちなか市
> . . .
> . . .
> . . .
>
>そして、フォームにコンボボックス3を配置して
>C列のデータを表示させ、コマンドボタンをクリックすると
>シート2にデータを書き込むみます。
>
・
・
>上記のコードで、動作は問題ないのですが....
>ただ、コンボボックス1で東京都を選択すると、コンボボックス2には
>新宿区の下に0が3行(空白セル分)表示されてしまいます。
>また、コンボボックス1で茨城県を選択すると、コンボボックスには
>2丁目の下に0が1行表示されます。
>この0を削除して空白にするにはどうすればいいのでしょうか?
なるほど、未入力だとそうなりますよね?
例えば、セルA1が未入力のとき、セルB1に「=A1」
とすると、「0」ってなるもんね!!
>そのコードは次のとおりです。
>
>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 & _
""",if(b1="""","" "",b1),"""")"
> Call set_combo_item(ComboBox2, func_str)
func_str = "=if(a1=""" & ComboBox1.Text & _
""",if(c1="""","" "",c1),"""")"
' 数式を上記のように変更して下さい。
' これでいけると思いますが・・・
' 但し、拡張してCombobox2や3を数式の中に組み込むときは、
' 注意が必要ですよ!!
' func_str = "=if(b1=""" & ComboBox2.Text & _
' """,if(d1="""","" "",d1),"""")"
' なんていう数式を仮に作成すると希望の処理がされない場合がでてきます
'
> 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
>
確認してみて下さい
|
|