Excel VBA質問箱 IV

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

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


62034 / 76738 ←次へ | 前へ→

【19314】Re:2577がらみの追加質問
発言  ichinose  - 04/10/28(木) 8:12 -

引用なし
パスワード
   ▼ととりん さん:
おはようございます。
出かけなければいけないので、ざっと見た限りですが・・・。

>はじめまして、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 = "" ←これ止めて・・・
'     原因は、↑このステートメントですね?
'     コンボックスの内容が変更した時点で
'     ComboBox1_Changeイベントが実行してしまいます。
'     最初にフォームを表示した状態に戻すなら

>  CelNo = "B" & CelPos
>  WS.Range(CelNo) = UserForm1.ComboBox2.Text
  'UserForm1.ComboBox2.Text = "" ' ←これも止めて・・
   ComboBox1.listindex=0
'   ↑このコードを入れて下さい。
'   他のコントロールでもそうですが、
'   Changeイベントを使っているときはそのコントロールをコードで
'   変更するような場合、注意が必要です。
'   場合によっては、フラグを作ってイベントコードを実行するか否かの
'   制御をしなければなりません。
 
> End Sub
>
>これで実行すると、
>ichinoseさんの返信の
>
>  Set rng2 = rng.Offset(0, 2).SpecialCells(xlCellTypeConstants)
>
>で引っかかってしまいます。
>
>解決方法がわからずに悩んでいます。
>上記内容の補足、修正、または別の解決方法を教えてください。
>よろしくお願いいたします。
>
>文章が長くなってしまい申し訳ありません。

確認してみて下さい。

0 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 お礼

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