|
はじめまして、ExcelのVBA初心者です。
質問2577「コンボボックスで選択、そしてまた次のコンボボックスで選択」で私がしたいことの半分はできたのですが、残りができないので教えてください。
まず、2577の内容から...
A B
1 東京都 渋谷区
2 東京都 新宿区
3 東京都 港区
4 茨城県 水戸市
5 茨城県 つくば市
6 茨城県 ひたちなか市
. . .
. . .
. . .
ユーザーフォームを作り、そこにコンボボックス1、
コンボボックス2を作ります。
コンボボックス1で都道府県名を選択し、
コンボボックス2で、1で選択した都道府県の「区市郡」
を選択できるようにするにはどうしたらよいのでしょう。
というのが質問内容でした。
そして、ichinoseさんの返信で
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
上記で2577の内容はできました。
私が、この続きでしたいことは、
フォームにコマンドボタンを配置し、クリックをするとコンボボックス1と2に表示された内容を、シート2のA列とB列の上から入力をしていきたいのです。
(上からというのは、1行目からデータが入力されているかどうかを検索し、
空白行が見つかったら、その行から入力したいという意味です。)
それを私なりに考え、下記のコードを入力しました。
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
UserForm1.ComboBox1.Text = ""
CelNo = "B" & CelPos
WS.Range(CelNo) = UserForm1.ComboBox2.Text
UserForm1.ComboBox2.Text = ""
End Sub
これで実行すると、
ichinoseさんの返信の
Set rng2 = rng.Offset(0, 2).SpecialCells(xlCellTypeConstants)
で引っかかってしまいます。
解決方法がわからずに悩んでいます。
上記内容の補足、修正、または別の解決方法を教えてください。
よろしくお願いいたします。
文章が長くなってしまい申し訳ありません。
|
|