- ベストアンサー
EXCEL ユーザーフォームの2つのtextboxの値で検索
久しぶりの投稿です。 今、EXCELのユーザーフォームのVBAで行き詰ってます。 お分かりの方宜しくお願いいたします。 まず、EXCELのシートが下の様にあります。 A B C D 1 得+支店 得意先コード 支店コード 得意先名 2 1030401 10304 01 XXX乳業 3 20000 20000 XXX商事本店 4 2000001 20000 01 XXX商事 A支店 (AのセルはB&Cで) textbox1に得意先コード textbox2に支店コードを入力してコマンドボタンを押したら textbox3に得意先名を表示させるという事がしたいのですが 支店コードが入ってる時はよいのですが入ってない時 実行時エラー’1004’ WorksheetFunctionクラスのVLookupプロパティを取得出来ません。 となってしまいます。 VBAは下の様になってます Private Sub CommandButton1_Click() Set ADR = Worksheets("sheet1").Range("A2:C4") TextBox3 = Application.WorksheetFunction.VLookup(TextBox1 + TextBox2, ADR, 4, False) End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 以下のように修正して試して見てください。 Private Sub CommandButton1_Click() On Error GoTo ExitER Set ADR = Worksheets("sheet1").Range("A2:D4") '変更(A2:C4 → A2:D4) TextBox3.Text = Application.WorksheetFunction.VLookup(TextBox1 + TextBox2, ADR, 4, False) On Error GoTo 0 Exit Sub ExitER: MsgBox "一致するコードがありません" On Error GoTo 0 End Sub
その他の回答 (2)
- fujillin
- ベストアンサー率61% (1594/2576)
少し違う方法ですが、エラー処理ルーチンを作らない、こんなのもあります。 (cはRange) 見つからなかったらなにもしません。 Set c = Range("A2:A4").Find(TextBox1.Text & TextBox2.Text, , xlValues, xlWhole) If Not c Is Nothing Then textbox3 = c.Offset(, 3).Value
補足
お返事遅くなり申し訳ございません。 #1の方の補足にも書かせていただいたのですが エラー処理、なにもしないと言うことではなく3行目の XXX商事本店と言うデータをひっぱってこないのがなぜかが分からないのです。
- pkh4989
- ベストアンサー率62% (162/260)
私が提示したマクロをそのまま入れ替えて、試したのですか? 問題なのは、Range("A2:C4")の範囲です。 Range("A2:C4")ではなくて、Range("A2:D4")です。
補足
はい 私の記入ミスでA2:C4となっていたので ご指摘いただいたようにA2:D4にしました。
補足
pkh4989様 早速の回答有難うございます。 一致するコードが無い場合はこのようにすればよいのですね。 でも、今回は3行目にデータがあるので"XXX商事本店"をひっぱってこなければいけないのに実行時エラー’1004’ WorksheetFunctionクラスのVLookupプロパティを取得出来ません。 になってしまうのです。