[[20031224162341]] 『品名によってリストボックスを使い分けたい』(@浪人中) ページの最後に飛ぶ

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

 

『品名によってリストボックスを使い分けたい』(@浪人中)

以下のようにセルA1には「肉」と入力してセルA2以下に具体的な肉の名前を、
同様にセルB1には「野菜」と入力してセルB2以下に野菜の名前を入力しておきます。

    A          B
1  肉     野菜
2  牛肉    ニンジン
3  豚肉    玉ねぎ
4  鶏肉    ジャガイモ 

リストボックスを利用して上記の肉と野菜の名前を入力したいのですが、リストボックス
を二個用意して以下のような2段階の入力をしたいのです。

1.最初のリストボックスで「肉」か「野菜」かどちらかを選択する。
2.最初のリストボックスで「肉」を選択した場合は二番目のリストボックスにセルA2〜A4の  肉の名前だけが表示されて、そこから選択できる。
  最初に「野菜」を選択したも同様に二番目のリストボックスには「野菜」の名前だけが
  表示され、そこから選択出来る。

どうすれば上記のような入力方法が実現できるでしょうか。
お分かりの方いらっしゃれば教えてください。


 C1を選択し、データ、入力規則、設定、リスト、元の値に=$A$1:$B$1
 D1を選択し、同様にして、元の値を=INDEX($A$2:$B$4,,MATCH($C$1,$A$1:$B$1,))
 では、どうでしょう?  (LOOKUP)


 以前私もここで教えて頂いたINDIRECTを使う方法です。
[[20031012231218]]『検収チェックリストの作成』(うえさん) 
(ケン)


 「リストボックス」って、
 1.ユーザーフォーム
 2.コントロールツール
 3.フォーム
 の3種類ありますよね。
 でも、LOOKUPさんのは「入力規則のリスト」みたいだし。
 どれでしょう。

 とりあえずユーザーフォームであるとするなら、

 Private Sub ListBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Select Case Me.ListBox1.ListIndex
 Case Is = 0
 Me.ListBox1.RowSource = "Sheet1!A2:A4"
 Case Is = 1
 Me.ListBox1.RowSource = "Sheet1!B2:B4"
 Case Else
 End Select
 End Sub

 コントロールツールのほうなら、

 Private Sub ListBox1_Change()
 Select Case Me.ListBox1.ListIndex
 Case Is = 0
 Me.ListBox2.ListFillRange = "Sheet1!A2:A4"
 Case Is = 1
 Me.ListBox2.ListFillRange = "Sheet1!B2:B4"
 Case Else
 End Select
 End Sub

 イベントの割り当てが適切かどうかちょっと不安ですがこんなところでしょう。
 はずしてたらゴメンナサイ。
 (KAMIYA)

 おはようございます。
 ユーザーフォームなら
 '------------------------
 Private Sub UserForm_Initialize()
    With ListBox1
        .AddItem "肉"
        .AddItem "野菜"
    End With
 End Sub

 'ここから下はコントロールツールも共通
 '-----------------------------
 Private Sub ListBox1_Click()
    If ListBox2.ListCount >= 1 Then
        Do While ListBox2.ListCount <> 0
            If ListBox2.ListIndex = -1 Then
                ListBox2.ListIndex = _
                ListBox2.ListCount - 1
            End If
            ListBox2.RemoveItem (ListBox2.ListIndex)
        Loop
    End If
    i = 2
    Select Case ListBox1.ListIndex
        Case 0
            Do While Cells(i, 1) <> ""
                ListBox2.AddItem Cells(i, 1)
                i = i + 1
            Loop
        Case 1
            Do While Cells(i, 2) <> ""
                ListBox2.AddItem Cells(i, 2)
                i = i + 1
            Loop
    End Select
 End Sub

 と言う方法もありまっせ。
    (弥太郎)

コメント返信:

[ 一覧(最新更新順) ]


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