[[20070522160014]] 『複数のリストボックスの連携?』(りー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数のリストボックスの連携?』(りー)
 さっそくですが・・・

 たとえば
 一つ目のリストとして (あ) (か) (さ) (た) (な)   の5種類

 あとのリストとして (あ)に対しては(い)(う)(え)(お)

           (か)に対しては(き)(く)(け)(こ)

           (さ)に対しては(し)(す)(せ)(そ)

           (た)に対しては(ち)(つ)(て)(と)

           (な)に対しては(に)(ぬ)(ね)(の)

 このようなリストがあるとします。
他のシートのセルA1に(せ)を入力したい時に
カーソルをA1に合わせて1つ目のリストで(さ)を選ぶと
次に選択できるものとして(し)(す)(せ)(そ)がリストとして
現れるようなことはできますか?
イメージとしてはA1を選ぶと(あ)(か)(さ)(た)(な)の選択項目が出てきて
その中の(さ)を選ぶとさらに(し)(す)(せ)(そ)の選択項目が出てくる
といったものを想像しているのですが・・・・
 
 過去ログをリストでしぼってみてみたのですが
なかなか思っているのと同じようなのがありませんでした。
よろしくお願いします。


 大サービスです。
 昨日、仕事で作りました。

 お望みのものとは若干違いますが・・・。
 ↓をシート1のA1から貼り付けます。

 あ	あ	か	さ	た	な	は	ま	や	ら	わ
 か	い	き	し	ち	に	ひ	み	ゆ	り	を
 さ	う	く	す	つ	ぬ	ふ	む	よ	る	ん
 た	え	け	せ	て	ね	へ	め		れ	
 な	お	こ	そ	と	の	ほ	も		ろ	
 は										
 ま										
 や										
 ら										
 わ										

 で、ユーザーフォームにリストボックスを2つ設置します。

 以下はユーザーフォームのモジュールに貼り付けます。

 Private Sub UserForm_Initialize()
  Dim i As Integer
   For i = 1 To 10
    Me.ListBox1.AddItem Worksheets(1).Cells(i, 1).Value
   Next i
 End Sub

 Private Sub ListBox1_Change()
  Dim r As Range
   Me.ListBox2.Clear
   Me.ListBox3.Clear
   Set r = Worksheets(1).Range("B1:K1").Find(what:=Me.ListBox1.Value, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByColumns)
   Set r = Worksheets(1).Range(r, r.End(xlDown))
   Me.ListBox2.List = r.Value
 End Sub

 ユーザーフォーム表示時にListBox1に「あかさたなはまやらわ」が表示され、
 ListBox1の、たとえば「あ」をクリックするとListBox2に、
 「あいうえお」と表示されます。

 (MARBIN)

 入力規則のリストを使う場合、
 INDIRECT関数を使う、というのもあったような気がします。
 (MARBIN)

 名前「あ」→(い)(う)(え)(お)
   「か」→(き)(く)(け)(こ)
   「さ」→(し)(す)(せ)(そ)
   「た」→(ち)(つ)(て)(と)
   「な」→(に)(ぬ)(ね)(の)
 ↑のように、名前の定義をして「(あ)(か)(さ)(た)(な)」を
 入力規則のリストで設定したセルが「A1」としたら、=INDIRECT($A$1)

 (Ohagi)


 ありまひた。

http://www.kenzo30.com/ex_kisopoint/onepoint_sonota3.htm#Q4

 (MARBIN)

みなさんありがとうございます。
なにぶん初心者に近いもので
VBAがよくわかりません。
ユーザーフォームでリストの形を作るまでは
出来るのですが、ユーザーフォームのモジュールに
はりつけるという作業がちゃんと出来なくて・・・

 UserForm に ListBox を2つ(ListBox1, ListBox2)配置
 Project explorer の UserForm1 のアイコンを右クリックして下記コードを貼り付け

 Private dic As Object

 Private Sub UserForm_Initialize()
 Dim r As Range
 Set dic = CreateObject("Scripting.Dictionary")
 With Sheets("sheet1") '<- change to suite
      With .Range("a1").CurrentRegion
           For Each r In Range(.Columns(1).Address)
                If Not dic.exists(r.Value) Then
                     dic.add r.Value, r.Resize(,.Columns.Count-1).Offset(,1).Value
                End If
           Next
      End With
 End With
 ListBox1.List = dic.keys
 End Sub

 Private Sub ListBox1_Click()
 ListBox2.Clear
 With ListBox1
      If .ListIndex = -1 Then Exit Sub
      ListBox2.List = dic(.Value)
 End With
 End Sub
 (seiya)      


MARBINさん seiyaさんありがとうございます。
思っているようなユーザーフォームとリストは出来ました!
ものすごく基本的なことなのでしょうが
そのリストで選択したものをセルに表示するにはどうしたら
いいのでしょうか?
たとえではあいうえおでしたが
実際は献立の作成をしていて一つ目のリストで食品の分類
2つ目のリストで食品名を選択してどんどんと食品名を入力して
行きたいのです。
ちなみに食品を入力するシートと食品の分類と食品名の一覧が
あるシートは違うのですが、ユーザーフォームは食品を入力するシートに
表示したいのですがどうしたらいいのでしょうか?

                         りー


 1) まず、どのコードを使用しているのかを明確にしてください。

 2) どのタイミングでListBox1/ListBox2 の値をどのシートのどこへ転記したいのか?

 (seiya)


すみません、何度もありがとうございます。
コードはMARBINさんのを使用しました。

食品を入力したいのはC4からC39です。

  食品の分類(リストボックス1)→野菜類 肉類 豆類 海藻類 とあって

  それぞれ(リストボックス2)野菜類には人参 かぼちゃ たまねぎ きゃべつ
     
                
                
                          肉類には牛肉 豚肉 鶏肉 鴨肉

                豆類には 大豆 ひよこ豆 あずき 枝豆

                海藻類には わかめ くきわかめ ひじき   など

で、セルC4にカーソルを合わせリストボックス1で野菜類を選ぶとリストボックス2で人参 かぼちゃ たまねぎ きゃべつ

という選択肢が出てきて、人参を選択するとC4に入力できる。
C5にカーソルをもってきてそれぞれのリストボックスで選択するとC5に入力と
いった感じにしたいのです。

                                        りー

        


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.