[[20070331092510]] 『コンボボックスの連携』(よしひろ) ページの最後に飛ぶ

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

 

『コンボボックスの連携』(よしひろ)
 「データ」シートにて以下の表を作成しました。
   A      B       C
 果物   りんご  100
 果物   なし   150
 果物   ぶどう  300
 野菜   なす   500
 野菜   はくさい 200
 野菜   かぼちゃ 400
 肉類   牛肉   100
 肉類   豚肉   300
 肉類   鶏肉   200

 ユーザーフォームのコンボボックスを2つ、テキストボックスを1つ作りました。
 コンボボックス1にてA列のリストを表示
 コンボボックス2にてA列から抽出されたリストを表示
 それで、このサイトにて教えていただいた構文が以下のものです。
 Private Sub ComboBox1_Change()
 Dim r As Range
    ComboBox2.Clear
  With Worksheets("データ")

    .AutoFilterMode = False
    .Columns("A:C").AutoFilter Field:=2, Criteria1:=ComboBox1.Value

    For Each r In .Range("C2:C" & .Range("C65536").End(xlUp).Row). _
                   SpecialCells(xlCellTypeVisible)
        ComboBox2.AddItem r.Value
    Next r

    .AutoFilterMode = False
 End With
 End Sub
 やりたいことは、このコンボボックス1とコンボボックス2で選択した項目の内容でC列の
 データをテキストボックスに表示させたいのです。
 例)果物-りんご だと「100」を表示
 どのようにすればよろしいでしょうか。
 よろしくお願いいたします。

 OS:windowsXP  excel2003


 ComboBox2.AddItem がC列になっていますが?
 B列としてComboBox2.Valueでもう一度AutoFilter?
 (DD)


 >このサイトにて教えていただいた構文・・・
 という事は初めての方へを読まなかったんですか?
 [初めての方へより抜粋]
 掲示板への書き込みやメールには習慣として半角カタカナを使わないということです
                             (´・ω・`)

 1) ComboBox2のColumnCountを 2 に設定
 2) ComboBox2のColumnWidthを "100;0" (2列目を非表示)
 3) ComboBox1のChangeイベントコードのAutofilterの後
    For Each r In .Range("b2",.Range("b" & Rows.Count).End(xlUp)).SpecialCells(12)
        With Me.ComboBox2
             .AddItem
             .List(n,0) = r.Value
             .List(n,1) = r.Offset(,1).Value
        End With
        n = n + 1
    Next

 4) ComboBox2のChangeイベントコードで
    With Me.ComboBox2
         Me.TextBox1.Text = .List(.ListIndex,1)
    End With

 かな?
 (seiya)

 どなたか分かりませんが、
 半角カタカナについては失礼いたしました。以後気をつけます。
 DDさん、seiyaさん、返信どうもありがとうございます。

 先の表ですが、間違えておりました。
 A列に連番が入って
   A      B       C         D
    1     果物   りんご  100
    2     果物   なし   150
    3     果物   ぶどう  300
    4     野菜   なす   500
    5     野菜   はくさい 200
    6     野菜   かぼちゃ 400
    7     肉類   牛肉   100
    8     肉類   豚肉   300
    9     肉類   鶏肉   200

 となります。
 それで、seiyaさんの構文で記述したところ、1回目は表示されるのですが、
 2回目にコンボボックス1を選択したところで、
 Me.TextBox1.Text = .List(.ListIndex,1)
 のところでエラーが出てしまいます。
 一番最初に
 ComboBox2.Clear
 と記述しているからなのかなと思うのですが、
 どのようにエラーを回避すればよいのでしょうか。
 できたら選択した項目をコマンドボタンにてセルに記入した後、
 コンボボックス2、テキストボックス1の内容を消去させたいのです。
 コマンドボタン1にはこのように記述したのですが、
 Private Sub CommandButton1_Click()
 Range("A31").Value = ComboBox1.Value
 Range("d31").Value = ComboBox2.Value
 Range("h31").Value = TextBox1.Value
 End Sub
 この後の記述が分かりません。
 よろしくお願いいたします。
 (よしひろ)


 ComboBox2のChangeイベントの先頭に

 If Me.ComboBox2.ListIndex = -1 Then 
      Me.TextBox1.Text = ""
      Exit Sub
 End If
 で回避してください。
 (seiya)


 seiya さん、どうもありがとうございます。
 おかげさまで思ったとおりのことが出来ました。
 本当にこのサイトにはいつも助けられます。
 今後とも分からないことがでてきたときはどうかよろしくお願いします。
 (よしひろ)


 解決してよかったです。
 このように「何をどうしたい」がはっきり伝わってくる質問は
 解決も早いですね。
 (seiya)

コメント返信:

[ 一覧(最新更新順) ]


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