• ベストアンサー

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

  • saiz
  • お礼率62% (66/106)

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

  • ベストアンサー
  • 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

  • TextBox.2 に Vlookupを入れる記述を教えて下さい。

    VBA初心者です。見よう見真似で売上伝票を作っています。 TextBox1には入力したコードをSheet2B1に書き込みたいです。 TextBox2にはTextBox1に入力したコードを見てVlookupのように、 商品リストから参照し、TextBox2に反映させたいです。 自分で作成してみたのですが、全く動きませんでした。 是非教えて下さい。宜しくお願い致します。 Private Sub CommandButton1_Click() With Worksheets("Sheet2") .Range("B1") = TextBox1.Text End With With Worksheets("商品リスト") TextBox2.Text = Application.WorksheetFunction.VLookup(Val(TextBox1.Value), RangeA, 2, False) End With End Sub

  • Application.WorksheetFunction.VLookupがどうしても出来ないです。教えて下さい。

    前回も問い合わせさせていただいていますが 少し私の言っている問い合わせと意味合いがちがうのでもう一度投稿させていただきます。     A      B     C      D 1 15001    15001       A社 本店 2 1500101  15001    01 A社 A店 3 15002   15002       B社 本店 4 1500202    15002 02       B社 B店 上記のようにSheet1があります。  A列のセルは 式で B & CでSETしています。 ユーザーフォームのTextbox1は得意先コード textbox2は支店コード textbox3に店名 textbox1とtextbox2を入力してコマンドボタンを押すとtextbox3に店名をsetすると言うことがしたいんですが支店コードの入っている店名はひっぱってくるのですが 支店コードのないものの店名が表示されません。 Private Sub CommandButton1_Click() On Error GoTo ExitER Set ADR = Worksheets("sheet1").Range("A1:D4") TextBox3 = Application.WorksheetFunction.VLookup(TextBox1 & TextBox2, ADR, 4, False) On Error GoTo 0 Exit Sub ExitER: MsgBox "一致するコードがありません" On Error GoTo 0 End Sub エラーの部分は前回の質問の時に教えて頂いたものです。 どうしてもわからないのでお分かりの方お教えください。  

  • エクセルでフォームを作成しています。(VBA)

    エクセルでフォームを作成しています。(VBA) フォームAで作成してあるリストボックスから選択して 取得した番号を フォームBにもってきて、その番号をもとにVLOOKUPで ほかのテキストボックスに値を持ってこようとしている のですがうまくいきません。 フォームAのリストボックスにはsheet1の名簿が 表示されています。 クリックで選択した名簿番号を取得して、フォームBにある 個人のページでその他の詳細を出そうとしています。 名簿番号はフォームBの名簿番号.Textに持ってこれたのですが その名簿番号をVLOOKUPで研究名を出そうとしてもうまくいきません。 コードのどこがだめなのか分かりません。 VBA入門者です。 よろしくお願いいたします。 --------------------- Private Sub 決定_Click() Dim ADR As Variant On Error GoTo ExitER Set ADR = Worksheets("sheet1").Range("A:F") 研究名.Text = Application.WorksheetFunction.VLookup(名簿番号.Text, ADR, 4, False) On Error GoTo 0 Exit Sub ExitER: MsgBox "一致するコードがありません" On Error GoTo 0 End Sub ---------------------

  • エクセルのフォームに値を返す方法について

    バーコードリーダでバーコードを読み、それに該当する商品を商品リストから探し出して表示させたいと考えています。 【エクセルのフォームの概要】 (1)バーコードNo用の「textbox1」→txtbox1 (2)商品表示用の「textbox2」→txtbox2 (3)商品リストのA2~E1000までデータが入っていて、商品名はその一覧表の左から3番目です。 見よう見まねで色々検討しているのですが、どうしてもできません。下記のように考えていますが、何も表示されません。ご指導の程宜しくお願い致します。 Dim RangeA As Range Dim Ansform As String Set RangeA = Worksheets("商品リスト").Range("A2:E1000") On Error Resume Next Ansform = Application.WorksheetFunction.VLookup(txtbox1.Value, RangeA, 3, False) txtbox2.Text = Ansform 初めてマクロ(VBA)の世界に入ってきたため、さっぱりわかっていません。突然組みだしてもさっぱり前に進まないので、バーコードリーダーを使った商品管理をエクセルでするような事例がどこかのサイトに出ていましたら教えていただけませんか?(検索をかけてもうまく見つかりません。)

  • ユーザーフォームでのエラー処理と入力文字クリア

    お世話になります。 Excel2003バージョンを使っています。 ユーザーフォームで、VLOOKUP関数を使っているのですが、「TEXTBOX2」に間違った文字を入力して該当する検索値がない時は、エラー処理として"範囲外です"とメッセージボックスが出るようにしています。その場合、同時に「TEXTBOX2」に間違って入力した文字もクリアされるようにするにはどうすればいいでしょうか?因みに参照する側のシート名は"名簿"でセルの範囲名が"data"となっています。 何卒よろしくお願いします。 現在のコードは以下の通りです。 Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim x As Long 'テキストボックス2の値を取得 x = TextBox2.Value On Error GoTo ErrHdl With ActiveSheet 'B列2列目を表示 TextBox3.Value = _ Application.WorksheetFunction.VLookup(x, Worksheets("名簿").Range("data"), 2, False) '参照する表の2列目 'C列目を表示 TextBox4.Value = _ Application.WorksheetFunction.VLookup(x, Worksheets("名簿").Range("data"), 3, False) '参照する表の3列目 'D列目を表示 ・・・・・・・ End With Exit Sub ErrHdl: MsgBox "範囲外です" End Sub

  • EXCEL VBAのユーザーフォームの配色について

    EXCEL VBAのユーザーフォームの配色の変更について教えていただきたいことがあります。 ユーザーフォームを設置しているのですが、プロパティで設定されている「システム」及び「パレット」の各色をVBAコードで表示することは出来るのでしょうか。 プロパティでUserForm1のBackColorを「強調表示」に設定 TextBox1の値を変えたときにTextBox1のBackColorを「強調表示」に変更する。 Private Sub TextBox1_Change() TextBox1.BackColor = RGB(255, 255, 150) End Sub でやろうとしていますが、全く同じ色を作ることができません。 システムやパレットの色をRGB以外のやり方で設定することはできるのでしょうか。 よろしくお願いいたします。

  • VBAでエクセル関数

    こんにちは。 EXCEL2000を使用しているのですが、 とあるホームページにVBAでEXCEL関数を使うやり方が掲載してあったのですがうまくいきません。 USERFORMでTEXTBOX1,2があります。 TEXTBOX1に”田中健二”と入力すると、TEXTBOX2に”たなかけんじ”とひらがなを表示させたいのですがうまくいきません。コードは下のように記述してあります。 Private Sub TextBox1_Change() T = TextBox1.Text F = Application.WorksheetFunction.Phonetic(F) Textbox2.text=F End Sub そのホームページには"Application.WorksheetFunction"の後にエクセル関数を記述すれば使えると書いてあったのですが、道なんでしょうか。ほかにもいろいろ使いたい関数があるのですが。 どなたかご教示願えますでしょうか。

  • エクセルのフォームに検索結果を表示する方法について

    エクセルのフォーム上に商品名を入力して、別シートに入っているデータを検索し、該当するデータを上記フォーム上に表示させたいと考えています。 【エクセルのフォームの概要】 (1)フォームはuserform1に作成してあります。商品名を入力→txtbox1 (2)「商品一覧表」というシートに商品一覧表が作成されていて、A1~J1000までデータが入っています。 (3)検索に引っかかるデータはその一覧表の左から2番目(商品名)の列です。 (4)該当するセルがある行の左から3番目のデータをフォームのtextbox2に表示させたいと考えています。 下記のように考えていますが、どうもうまくいきません。ご指導の程宜しくお願い致します。(つい最近マクロを始めたばかりなので、とんでもない構文なのかもしれませんが、自分ではどこがどうダメなのかわかりません。) Private Sub CommandButton1_Click() Dim RangeA As Range Set RangeA = Worksheets("商品一覧表").Range("A1:J1000") UserForm1.TextBox2.Text = Application.WorksheetFunction.VLookup(TextBox1.Value, RangeA, 3, False) End Sub

  • VBAのフォームでTextBoxがいっぱいある時

    Microsoft Excel 2000 for VBAのフォーム機能を使用して TextBox?に値が入力したらシートの指定したセルへ値が入るようにしたいんですが、 TextBoxがいっぱいあるため、以下のように非常に長いプログラムになってしまいました。 Private Sub TextBox1_Change() Sheets(sheetname).Cells(1, 横位置).Value = TextBox1.Value End Sub TextBox2~29は繰り返し Private Sub TextBox30_Change() Sheets(sheetname).Cells(30, 横位置).Value = TextBox30.Value End Sub 上手く配列化なんかでまとめる方法がありましたらアドバイスください。

  • エクセル ユーザーフォームでVLOOK

    ユーザーフォームのテキストボックスで、ご教示お願いいたします。 現在、以下のようなコードこちらで教えていただきセルに入力をしております。 テキストボックス5に値を入れ、 listのシートから該当する文字をテキストボックス6に表示させたいと思っております。 ■現在のコード '// Private Sub CommandButton1_Click() Dim LastRow As Long 'ここはキャメル形式やパスカル形式にします/大文字は定数です。 Dim i As Long '/テキストボックスに値があるか調べる For i = 1 To 7 Next i '/セルに書き込み With Worksheets("Sheet1") LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 1 To 7 .Cells(LastRow, i).Value = Me.Controls("TextBox" & i).Value Next End With '/TextBox1-7をクリア If MsgBox("テキストボックスを空にしてよろしいですか?", vbQuestion + vbYesNo) = vbYes Then For i = 1 To 7 Me.Controls("TextBox" & i).Value = "" Next i End If 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub ■付け足したいコード Private Sub textbox5_change() Dim temp, x temp = Me.textBox5.Value If IsNumeric(temp) Then temp = Val(temp) x = Application.VLookUp(temp, Sheets("list").Range("a1:b20"), 2, False) If Not IsError(x) Then Me.TextBox6.Value = x Else MsgBox Me.TextBox5.Value & " はリストにありません" End If End Sub 【質問内容】 付け足したいコードは上記の通りですが、どのように付け足せばいいのかが分からず、 困っております。 度々で申し訳ありませんが、テキストボックス5の値を見て、 テキストボックス6に表示させるやり方をご教示お願いいたします。

専門家に質問してみよう