• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

こんにちは。 以下のように修正して試して見てください。 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

saiz
質問者

補足

pkh4989様 早速の回答有難うございます。 一致するコードが無い場合はこのようにすればよいのですね。 でも、今回は3行目にデータがあるので"XXX商事本店"をひっぱってこなければいけないのに実行時エラー’1004’ WorksheetFunctionクラスのVLookupプロパティを取得出来ません。 になってしまうのです。

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

少し違う方法ですが、エラー処理ルーチンを作らない、こんなのもあります。 (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

saiz
質問者

補足

お返事遅くなり申し訳ございません。 #1の方の補足にも書かせていただいたのですが エラー処理、なにもしないと言うことではなく3行目の XXX商事本店と言うデータをひっぱってこないのがなぜかが分からないのです。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

私が提示したマクロをそのまま入れ替えて、試したのですか? 問題なのは、Range("A2:C4")の範囲です。 Range("A2:C4")ではなくて、Range("A2:D4")です。

saiz
質問者

補足

はい 私の記入ミスでA2:C4となっていたので ご指摘いただいたようにA2:D4にしました。

関連するQ&A