• ベストアンサー

EXCEL VBA VLOOKUPの様な検索したい

お世話になります。 VBAを使ってVlookupのような動きをする検索を実施したいのです。 添付図のようにsheet1に基本データが入っています。 [検索]ボタンをクリックしたらsheet1の商品番号をキーにして、sheets2を参照してsheet1の区分にA-Dの値を挿入したいと思います。 sheet1、sheet2ともにデータ量が可変です。 どなたかご教授いただけますでしょうか? お忙しいところ恐縮ですがよろしくお願い致します。 環境 WinsowsXP SP3

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

その通りVLOOKUPしてしまうのが一番簡単です。 sub macro1()  dim r as long  worksheets("Sheet1").select  for r = 3 to cells(rows.count, "A").end(xlup).row   cells(r, "C").value = application.vlookup(cells(r, "A").value, worksheets("Sheet2").range("A:B"), 2, false)  next r end sub

yakkun2338
質問者

お礼

keithinさん、早速のご連絡ありがとうございます!! ご教授いただきました方法で実現できました! vlookupをそのまま(?)使用すればよいのですね。てっきりロジックを組まないとできないのかと思っておりました。 いつも本当にありがとうございます!!

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! >Vlookupのような動き・・・ とありますので一例です。 Sheet2のデータはA・B列にあるとします。 Sub Sample1() Dim i As Long, c As Range, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") i = wS1.Cells(Rows.Count, 1).End(xlUp).Row If i > 2 Then Range(Cells(3, "C"), Cells(i, "C")).ClearContents End If For i = 3 To wS1.Cells(Rows.Count, 1).End(xlUp).Row Set c = wS2.Range("A:A").Find(what:=wS1.Cells(i, 1), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then wS1.Cells(i, "C") = c.Offset(, 1) End If Next i End Sub こんな感じではどうでしょうか? ※ No.1さんが回答されていらっしゃるように VLOOKUP関数をそのまま使った方が簡単なような気がします。m(_ _)m

yakkun2338
質問者

お礼

tom04さん、早速のご連絡ありがとうございます!! ご教授いただきました方法で実現できました! No.1さんにご回答いただきました様にvlookupをそのまま(?)使用するという方法を知りませんでした(^^;; いつもtom04さんからは詳細なロジックをご教授いただいておりまして、とても勉強させていただいております。 いつも本当にありがとうございます!!

関連するQ&A

  • EXCEL VBA 絶対参照VLOOKUP検索

    お世話になります。 つい先ほども同じような質問させていただきましたが、VBAを使ってVlookupのような動きをする検索を実施したいのです。ただし、今回は商品マスターを絶対参照したいのです。 相対参照での処理は前回質問で回答者様からご教授いただきました方法で実現できました。 添付図のようにsheet1に基本データが入っています。 [検索]ボタンをクリックしたらsheet1の商品番号をキーにして、sheets2を参照してsheet1の区分にA-Dの値を挿入したいと思います。 sheet1、sheet2ともにデータ量が可変です。 sheet2の商品マスターを参照する際には絶対参照にしたいです。 どなたかご教授いただけますでしょうか? お忙しいところ何度も恐縮ですがよろしくお願い致します。 環境 WinsowsXP SP3

  • エクセルVBAで行うVLOOKUPについて

    エクセル2000を使用しています。 いまいろいろVBAを使用してますが、わからないことがあります。 シート1に入力データ、シート2に参照のデータ USERFORM を使用し たとえばテキストBOX1にコードAと入れるとテキストBOX2に東京支店と表示し確認をできるようにしたいのです。東京支店は、シート2の参照データから引用してきます。 BOX1にAと入れてエンターを押した時点でVLOOKUPを実施させたいのですがいまいちわかりません。 シート2は A列にコード A,B,C,D,.... B列に東京支店、千葉支店... よろしくお願いいたします

  • Excel VLOOKUPをVBAでやりたいのですが、分からなくて困っ

    Excel VLOOKUPをVBAでやりたいのですが、分からなくて困ってます。 Sheet1のC列2行目行こうにSheet2のI列のデータを取得し (A列にデーターが入っている分、(時と場合により表示数が違う為)) なおかつ Sheet1のD列2行目以降にB-Cの差し引きをおこなう 以上のことをSheet1をアクティブにした時VBAでおこなうには、? 教えて下さい。宜しくお願い致します。

  • EXCEL VBA VLOOKUPの様な検索したい

    お世話になります。 質問させていただきます。 添付図の表3を作成したいのです。 やりたい事は・・・ [販売金額]シートに[集計]というボタンを作成して、このボタンがクリックされたら[商品名]と[年月] (2012年4月とか)をKEYに隣の[平均単価]シート参照して、合致する平均単価を該当商品の販売金額の下段に1行挿入して平均単価を表示させたいのです。(図中 表3の緑セル部分) まとめますと・・・ 販売金額シート表1の全データをREADして商品名と年月をKEYに表2に合致した平均単価を探して、見つかれば平均単価を1行挿入して表示して最終的には表1を表3に変化させたい、のです。 補足 商品数は可変ですが1000個程度です。 もし合致する平均単価がなくても該当商品に平均単価フィールドを1行挿入して0円またはブランク表示させたいです。 何度も似たような質問ばかりしてまして申し訳ありませんが、どなたかご教授いただけませんでしょうか? よろしくお願い致します。 環境 Windows XP SP3 Excel2003

  • 連動するvlookupかVBAを教えて下さい。

    現在、シート2にデータ一覧表(列が100程度/行は無数です)が存在しており、シート1にvlookupで反映させています。(シート1は行ごとの印刷用) 今回、列データの追加・削除を行う事になりました。 今まではvlookupで =VLOOKUP(Z3,一覧表,81,FALSE)のように抽出していましたが、 この場合、シート2の列を挿入するたびに設定しなくてはいけません。 ※Z3にはシート2のA列(ID)を手入力します。 シート2の列に連動してシート1の関数を変化させることは出来ますか? もしくは、VBAなら可能なのでしょうか? ちなみに、シート1ではシート2のデータが無秩序に並んでいます。 何か良い方法を教えて下さい。。。。よろしくお願いいたします。

  • エクセル、VBA、抽出複数検索について

    エクセル、VBA、VLOOKUP、MATCH関数等について出来る方法があれば教えてください。 インチごとに分けてあるシートがあり、(在庫表です) これを参照して、別ブックへVLOOKUP等を使って、サンプルデータのシート4のように表示させたいのですが、 何か方法を使って出来ることは可能でしょうか? 問題点が複数あります 1、VLOOKUPの範囲について、B列が結合されていて、C列は複数行あるため、商品名が入ってきません。 C列については、何千件とデータがあるため、結合することは不可能です。 一致している条件としては商品コードが必ずあり、商品名には「/」が入っております。 =CONCATENATEとVLOOKUPは一緒に使うことは可能ですか? もしくはINDEX関数やIF、SUMPRODUCT等を使うのでしょうか? シート4のような形に出来る方法があれば、教えてほしいです。 VBAは詳しくはないのですが、VBAで出来るのであれば、教えてほしいです。 在庫表はとても作り方が悪いのですが、これを作り直すと言うことは、不可能です。 グループ会社で使っているため、なんとかこの在庫表を使いたいです。 VBAでA列をA5からA100にコードのみ入れた場合、B列に商品名が入るようにVBAで作ることは可能でしょうか? もしくは、検索条件を2つ使って、一つは商品コード完全一致+あいまい検索で【/】で商品名を入れることは可能でしょうか? 関数は調べたのですが、関数では難しいのかなと思います。 宜しくお願い致します。

  • Excel VBAのVLOOKUP関数について

    Excel VBAのVLOOKUP関数について VBAでのVLOOKUPで他のブックを使用する場合の方法がわかりません。 ブックαにて参照したい他のブックβのパスやファイル名、シート、セルは保持しております。 同一ファイル内では取得することができたのですが、他のブックではうまくいきません。 また、VLOOKUP関数にて取得できた場合、取得したセルの下に1段、左に1段目のセルを取得したい場合どうすればいいのでしょうか? 環境はEXCEL2003です。 ご存知の方がいれば教えてください!

  • vbaでvlookup

    エクセルのVBAについて。 指定した範囲の中から検索条件に一致したデータを検索し、取り出してくれる関数vlookup をVBAで実現したいのですが、 目標として、エクセルのセル(列)に、値を入力されているとします。 VBAを実行するボタンをクリックすると、、、 その値に対応する文字列(事前に用意)をその値の右のセルに自動で入力させたいです。 このVBAを作ることが目標です。 vbaでvlookupを実現でなくても、それよりも簡単な方法があれば教えていただきたいです。 お手数ですが、よろしくお願いします。

  • VLOOKUP関数と同じことをVBAでおこなうには

     初めまして、当方VBAの素人です。よろしくお願いします。  同じような質問で、このようなVBAを見つけました。 Sub Macro1() For n = 2 To 5 '処理するSheet2の行数範囲 a = Sheets("Sheet2").Cells(n, 1) 'aにA列の値を代入 For m = 2 To 5 '検索するSheet1の行数範囲 If Sheets("Sheet1").Cells(m, 1) = a Then 'Sheet2のA列の値とSheet1のA列が一致した場合 v = Sheets("Sheet1").Cells(m, 2) 'vにB列の値を代入 Sheets("Sheet2").Cells(n, 2).Value = v 'Sheet2のB列に値を入力 Exit For '値が見つかったのでForを終了 End If Next Next End Sub このVBAではSheet2での検索、入力が列になるのですが、列でなく、行でできないでしょうか。できればSheet1のB列の値をSheet2の1行で検索、Sheet2の2行に入力されるだけではなく、Sheet1のC列の値をSheet3の1行で検索、Sheet3の2行に入力されるようにしたいと思います。  解る方、よろしくお願いします。

  • VBA VLOOKUP 別のファイルを参照

    VBA VLOOKUP 別のファイルを参照 いつもこちらでお世話になっている者です。 VBAの勉強をしております。 別のファイルからVLOOKUPで値を参照したいのですが、 範囲を指定してみましたが、 「worksheetFunctionクラスのVlookupプロパティを参照できません」 とのメッセージが出てしまいます。 なお、値は空白になる行もありますので、 if関数で回避してみましたがうまくいきません。 いろいろ試しましたが、何度やってもうまくいかないので こちらに質問させていただきました。 お詳しい方、ご伝授いただければ助かります。 よろしくお願い致します。 環境はExcel2007です。 Sub sample() Dim 範囲 As Range Dim wb As Workbook, wb2 As Workbook Dim r As Integer,intRow As Integer Workbooks.Open Filename:="***.xlsm" Set wb = ThisWorkbook Set wb2 = ActiveWorkbook Set 範囲 = wb2.Sheets("PvtSht2").Range("Database3") r = wb.Sheets("sheet1").Range("A28:N28").End(xlToRight).ColumnintRow = 3 With wb.Sheets("sheet1") Do Until .Cells(intRow, 1).Value = "" .Cells(intRow, (r + 1)) = Application.WorksheetFunction.If((Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False)) = 0, "", Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False)) intRow = intRow + 1 Loop End With End sub

専門家に質問してみよう