[[20140225154806]] 『オプションボタンとIf関数の併用』(みけねこ) ページの最後に飛ぶ

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

 

『オプションボタンとIf関数の併用』(みけねこ)

ActiveXのリストボックスとオプションボタンを使い、
リストボックス(商品コードのリスト、別シートにあり)をクリックした時、
OptionButton1 = Trueなら、A1に商品コードを入力
OptionButton2 = Trueなら、A3に商品コードを入力
さらに、
A1(A3、括弧内はOptionButton2 = Trueの場合)
の商品コードからVLookupで別シートの商品シートから商品名と商品価格を取得し、
商品名をA2(A4)へ、商品価格をB2(B4)へ入力する、
ということを考えています。

しかし、変数とIfをどう記述したらよいのかわからず、うまくいきません。
ご教授くだされば幸いです。初心者です。

Private Sub ListBox1_Click()

    Dim C1 As Variant
    Dim C2 As Variant
    Dim C3 As Variant

    If OptionButton1 = True Then
        C1 = Worksheets("シート1").Range("A1")
        C2 = Worksheets("シート1").Range("A2")
        C3 = Worksheets("シート1").Range("B2")
        Range("A1").Value = ListBox1

    ElseIf OptionButton2 = True Then
        C1 = Worksheets("シート1").Range("A3")
        C2 = Worksheets("シート1").Range("A4")
        C3 = Worksheets("シート1").Range("B4")
        Range("A3").Value = ListBox1
    End If

    Worksheets("シート1").Range(C2).Value = Application.WorksheetFunction.VLookup _
    (Worksheets("シート1").Range(C1), Worksheets("商品シート").Range("A:F"), 2, False)

    Worksheets("シート1").Range(C3).Value = Application.WorksheetFunction.VLookup _
    (Worksheets("シート1").Range(C1), Worksheets("商品シート").Range("A:F"), 5, False)

End Sub

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 よくわかんないけど、こういうこと?
Private Sub ListBox1_Click()
    Select Case True
        Case OptionButton1
            Call 処理(ListBox1.Text, "A1", "A2", "B2")
        Case OptionButton2
            Call 処理(ListBox1.Text, "A3", "A4", "B4")
    End Select
End Sub
Sub 処理(s0 As String, s1 As String, s2 As String, s3 As String)
    With Sheets("シート1")
        .Range(s1) = s0
        .Range(s2) = Evaluate("VLOOKUP(" & s0 & ",商品シート!A:F,2,0)")
        .Range(s3) = Evaluate("VLOOKUP(" & s0 & ",商品シート!A:F,5,0)")
    End With
End Sub
(稲葉) 2014/02/25(火) 16:51

拙い内容を読み取っていただき、ありがとうございます。

オプションボタンの場合分けと、A1(A3)への入力はうまくいきました。
ただ、A2(A4)およびB2(B4)へのVLOOKUPの参照結果が#NAME?になってしまいます。
(みけねこ) 2014/02/25(火) 17:37


 実際のコードはどうなっていますか?
 商品シートの「!」 が抜けていたりしませんか?
(稲葉) 2014/02/25(火) 17:56

実際のコードは以下の通りです。
実際は商品シートにはA列からAP列まで、1000行以上のデータが入っています。

標準モジュール
Sub 処理(s0 As String, s1 As String, s2 As String, s3 As String, s4 As String, s5 As String, s6 As String, s7 As String)

    With Sheets("シート1")
        .Range(s1) = s0
        .Range(s2) = Evaluate("VLOOKUP(" & s0 & ",商品シート!A:AI,2,0)")
        .Range(s3) = Evaluate("VLOOKUP(" & s0 & ",商品シート!A:AI,5,0)")
        .Range(s4) = Evaluate("VLOOKUP(" & s0 & ",商品シート!A:AI,6,0)")
        .Range(s5) = Evaluate("VLOOKUP(" & s0 & ",商品シート!A:AI,19,0)")
        .Range(s6) = Evaluate("VLOOKUP(" & s0 & ",商品シート!A:AI,27,0)")
        .Range(s7) = Evaluate("VLOOKUP(" & s0 & ",商品シート!A:AI,35,0)")
    End With
End Sub

シート1のプロシージャ
Private Sub ListBox1_Click()

    Select Case True
        Case OptionButton1
            Call 処理(ListBox1.Text, "D17", "D18", "F17", "G17", "J6", "L17", "L18")
        Case OptionButton2
            Call 処理(ListBox1.Text, "D19", "D18", "F19", "G19", "J6", "L19", "L20")
    End Select
End Sub
(みけねこ) 2014/02/25(火) 18:12

リストボックスが参照しているシートと
VLookupの参照シートが異なるからでしょうか。
(みけねこ) 2014/02/25(火) 18:23

なんとかやりたいことができるようになりました。
稲葉さま、ありがとうございました。
(みけねこ) 2014/02/25(火) 18:55

コメント返信:

[ 一覧(最新更新順) ]


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