• ベストアンサー

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 エラーの部分は前回の質問の時に教えて頂いたものです。 どうしてもわからないのでお分かりの方お教えください。  

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

A1に次の式を設定してみてください =B1&C1 フィルで下方向に #1さんの回答を適用後は =VALUE(B1&C1) に変更してください

saiz
質問者

お礼

お返事おそくなりました。 セルを単純にプロパティを出して文字列にしてるだけではダメなんですね。 有難うございました。#1とhige_082さんの教えでできました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

同じことを シートの数式では実現できているのでしょうか? たとえば10行のA,B列にコードを入力 C列に数式とした場合に =VLOOKUP( A10&B10, A1:D4, 4, False) として #N/Aにならないのか確認してみましょう どこで期待通りの値を取得していないのかチェックするのも必要ですよ TextBox2をスペースで内容をつぶしているとか 予期しない行動しているのかも

saiz
質問者

お礼

ご回答有難うございます。 お返事遅くなりました。#1さんと#2さんのお教えでできました。 シート内でテストをしてみる事が必要なんですね。 勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.1

こんにちは。 テキストボックスに入力した会社コード、支店コードは見かけは数値でも実は文字列です。 セルに入力されている値は数値なのでしょう。 だから、数値と文字列の比較になってしまい、検索できないのではないでしょうか。 >TextBox3 = Application.WorksheetFunction.VLookup(TextBox1 & TextBox2, ADR, 4, False) を With Me .TextBox3 = Application.WorksheetFunction.VLookup _ (Val(.TextBox1.Value & .TextBox2.Value), ADR, 4, False) End With Val関数で数値にしてやれば、うまくいきませんか。

saiz
質問者

お礼

お返事遅くなり誠に申し訳ありませんでした。 masa_019様の教えて下さったように処理したのにできませんでした。 #2さんのセルの式に変える事でできました。 有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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

  • エクセルでフォームを作成しています。(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 ---------------------

  • エクセル(VLOOKUP関数)~続です。

    先程の質問の続きになるのですが、 エクセルにデータを入力をしていきたいのですが、数が何万件とあります。まず、コード表が2つあります。(2つのコード表はコード番号が重複しています) 本店が1で支店が2です。 セルAの1に本店コード1を入力したら本店コード表を基にして、VLOOKUP関数でセルAの2に種類コードを入力したら、セルAの3に種類名がでてくる。セルAの1に支店コード2を入力したら支店コード表を基にして、VLOOKUP関数でセルAの2に種類コードを入力したら、セルAの3に種類名がでてくる。このようなつくりにはできますか? 店名コード コード番号 種類名  1      1111   りんご  1      1112   ぶどう  2      1111   人参  1      1114   なし  2      1112   レタス 上記のような感じです。コード番号自体は重複しています。ただ店名コードが変わると、種類名が果物と野菜と区別されている感じです。 説明が分かりにくかったら補足致します。すみませんが分かる硬いましたら、ご教示ください。宜しくお願いします。

  • エクセル

    excelについての質問です。 取引先管理しています。すべてに会社コードが付いています。 同系列の会社にもそれぞれコードが付いています。 同系列の会社のコードを本社のコードに変えたいのですが、関数で変更することは可能でしょうか? 例) コード 会社名 1    A社 本店 2    B社 本店 3    A社A支店 4    A社B営業所 5    B社A支店 6    C社 本店 7    D社 本店 8    D社C支店 このようなのが、2.30あります。 もちろん支店のない取引先もあります。 よろしくお願いします。

  • On Error GoTo でエラーが発生する

    Sub Macro1() On Error GoTo ErrorTrap1     '-エラーの発生するコード 1 ErrorTrap1: On Error GoTo 0    Do    On Error GoTo ErrorTrap2       '-エラーの発生するコード 2    On Error GoTo 0    Loop ErrorTrap2: End Sub しかし、以下のようにSubで二つに分けるとエラーは出ません。 Sub Macro1() On Error GoTo ErrorTrap1     '-エラーの発生するコード 1 ErrorTrap1: On Error GoTo 0 Call Macro2 End Sub Sub Macro2()     Do      On Error GoTo ErrorTrap2       '-エラーの発生するコード 2     On Error GoTo 0     Loop   ErrorTrap2: End Sub 「On Error GoTo 0」がうまく解除できていないのかと思い、いろいろ試してみました。 しかし、どういった理由かはわかりませんでした。 「On Error GoTo」は、Subでは、ひとつしか使えないのでしょうか。

  • 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

  • お世話になります

    お世話になります シートが存在する時だけ処理するマクロを組みたいです。 そこで下記の通り作ってみましたが、上手に動きません。   Sub マクロ()      Dim mychksht As Worksheet     1:      On Error GoTo 2      Set mychksht = Sheets("1")      MsgBox "1 あります"     2:      On Error GoTo 3      Set mychksht = Sheets("2")      MsgBox "2 あります"     3:      On Error GoTo 4      Set mychksht = Sheets("3")      MsgBox "3 あります"     4:      On Error GoTo 5      Set mychksht = Sheets("4")      MsgBox "4 あります"     5:      MsgBox "終了します"    End Sub シートが2枚不足すると「インデックスが有効範囲にありません」とのメッセージが出ます。 ※1枚不足しているだけなら正常に処理します。 分かる方いらっしゃいますか? 理由と対策をお教え頂ければ幸いです。   

  • 二つのエラーを発生させたい

    ひとつのプロシージャー内で、 二つのエラートラップを仕掛ける事は出来ないのでしょうか? Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description On Error GoTo Err2 i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub を行うと、 i = "b" で2回目のエラーが発生した時は、 実行時エラーになってしまいます。 i = "b" で2回目のエラーが発生した時に、 「Err2のエラー: 型が一致しません。」 と表示させるにはどうすればいいでしょう? Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 On Error GoTo Err2 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub にすると、 i = "a" のエラーで、 「Err2のエラー: 型が一致しません。」 へ移動してしまいます。

  • ループの中で何度もエラー処理をしたい場合

    サンプルコードを掲載します。 実際はセルの文字を取得するのでこのコードとは違いますが、形は同じです。 Sub test() Dim i As Long On Error GoTo Err1 For i = 0 To 5 i = "a" Err1: Debug.Print i "は、エラーになりました" Next End Sub このようなコードの場合、 i=0の時に、1回目のエラーになって 「0は、エラーになりました」が返りますが、 その後、i=1になった時に i = "a"を実行すると On Error GoTo Err1が無視され、エラーになってしまいます。 ループの中でエラーが何度発生してもエラー処理をする方法はありますか? On Error Resume Next以外の方法で教えてください。

  • 「エラーの宣言」「エラーの定義」

    Sub Sample() Dim i As Long On Error GoTo test i = "a" test: i = 1 End Sub こういうのって、 On Error GoTo test の部分は「エラーの宣言」って言いますか? 「エラーの定義」でしょうか?

このQ&Aのポイント
  • ある会社の飲み会に代行参加することになりましたが、奥様からのお願いで自腹で会費を負担することになりました。
  • しかし、代行後も奥様は忘れたかのように振る舞い、代行代の領収書を求めることもありませんでした。
  • 奥様の対応に疑問を感じ、何度かその後も会っても代行代の件は触れず、関係がよそよそしくなってしまいました。
回答を見る