Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


62036 / 76738 ←次へ | 前へ→

【19312】2577がらみの追加質問
質問  ととりん  - 04/10/28(木) 4:58 -

引用なし
パスワード
   はじめまして、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)

で引っかかってしまいます。

解決方法がわからずに悩んでいます。
上記内容の補足、修正、または別の解決方法を教えてください。
よろしくお願いいたします。

文章が長くなってしまい申し訳ありません。

2 hits

【19312】2577がらみの追加質問 ととりん 04/10/28(木) 4:58 質問
【19314】Re:2577がらみの追加質問 ichinose 04/10/28(木) 8:12 発言
【19336】Re:2577がらみの追加質問 ととりん 04/10/28(木) 15:24 お礼
【19346】Re:2577がらみの追加質問 その2 ととりん 04/10/28(木) 18:36 質問
【19353】Re:2577がらみの追加質問 その2 ichinose 04/10/28(木) 22:24 発言
【19354】Re:2577がらみの追加質問 その2 追伸 ichinose 04/10/28(木) 22:31 発言
【19357】Re:2577がらみの追加質問 その2 追伸 ととりん 04/10/28(木) 23:26 お礼
【19387】Re:2577がらみの追加質問 その3 ととりん 04/10/29(金) 23:52 質問
【19395】Re:2577がらみの追加質問 その3 ichinose 04/10/30(土) 16:11 発言
【19401】Re:2577がらみの追加質問 その3 ととりん 04/10/31(日) 11:12 お礼

62036 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free