Excel VBA質問箱 IV

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

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


13587 / 76732 ←次へ | 前へ→

【68648】Re:コンボボックスのドロップダウンについて
回答  UO3  - 11/4/1(金) 10:41 -

引用なし
パスワード
   ▼レッズ命 さん:

こんにちは

上で質問させていただいていますが、それと並行して、一生懸命(?)コードを読んで
シートのイメージを想像し、そこでおやりになりたいことを、これまた想像。
【雑貨】を特別扱いしているところが、まだ読み取れませんが、

・きっとシートのA列にComboBox1用の品種名がはいっているのだろう。
・そしてB列に、その品種の細目が入っているんだろう。

このように推測。
このコンボボックスがユーザーフォームのコントロールなのかシート上のActiveXコントロール
なのかが不明ですが、以下。

最初にComboBox1に値をセットするところのタイミングを、最初にComboBox1の▼が
おされた時にしていますが、このコントロールの正体(?)がわかれば、もっと適切な
ところにおくこともできます。
また各種オブジェクトを生成しっぱなしなのが気になっていますが、これもコントロールが
どちらなのかがわかれば、後始末処理も追加できます。

★RowSourceは使いませんのでプロパティで指定してあればなくしておいてください。

Option Explicit

Dim dic As Object

Private Sub ComboBox1_DropButtonClick()
  Static Ready As Boolean
  If Not Ready Then ComboSet
  Ready = True
End Sub

Private Sub ComboBox1_Change()
  ComboBox2.Clear
  If dic.exists(ComboBox1.Value) Then
    ComboBox2.List = dic(ComboBox1.Value).keys
    ComboBox2.DropDown 'これはEnd SUbのあとまた閉じると思いますが?
  End If
End Sub

Private Sub ComboSet()
  Dim c As Range
  Set dic = CreateObject("Scripting.Dictionary")
  ComboBox1.Clear
  ComboBox2.Clear
  For Each c In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
    If Not dic.exists(c.Value) Then
      Set dic(c.Value) = CreateObject("Scripting.Dictionary")
    End If
    dic(c.Value)(c.Offset(, 1).Value) = True
  Next
  ComboBox1.List = dic.keys
End Sub
0 hits

【68643】コンボボックスのドロップダウンについて レッズ命 11/3/31(木) 22:36 質問
【68647】Re:コンボボックスのドロップダウンについて UO3 11/4/1(金) 10:04 発言
【68648】Re:コンボボックスのドロップダウンについて UO3 11/4/1(金) 10:41 回答
【68649】Re:コンボボックスのドロップダウンについて UO3 11/4/1(金) 11:17 発言
【68650】Re:コンボボックスのドロップダウンについて kanabun 11/4/1(金) 12:10 発言
【68652】Re:コンボボックスのドロップダウンについて レッズ命 11/4/1(金) 13:13 お礼

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