【ExcelVBA】VLOOKUPで商品名を表示する方法

このQ&Aのポイント
  • ExcelVBAを使用して、VLOOKUP関数を使って商品名を表示する方法について質問しています。
  • 具体的には、1桁の数字を編集して3桁の数字に変換し、別のファイルの一覧にある商品名をキーとしてVLOOKUP関数を利用してE列に表示させたいと考えています。
  • 質問者はVBA初心者であり、効率的でシンプルな処理方法についてアドバイスを求めています。
回答を見る
  • ベストアンサー

【ExcelVBA】VLOOKUPの方法について。

《全体の仕様(今回の質問に関連する箇所のみ)》 1)作業列にある2桁の数字の頭に「1」を付加して「1XX」という3桁の数字にし、D列にコピーする。 2)その3桁の数字をキーとし、別ファイルの「A列:キー / C列:商品名」という一覧からVLOOKUPで商品名をE列に表示させたい。 1)に関しては、過去にこのように質問させて頂きました。 http://oshiete1.goo.ne.jp/qa3976946.html マクロでVLOOKUPを使うのは初めてでして、2のロジックの考え方について、迷っています。 まず、キーとなる数字を編集してから、一番上の行~最終行にかけて、一気にVLOOKUPをかけた方がよいのでしょうか? それともループの中で1行編集するごとに、VLOOKUP関数をキー列の隣に入れていった方がよいのでしょうか? 処理が早い方、且つできればソースがシンプルな方(当方VBAはかなり初心者です…)は、どちらの考え方になるのでしょうか? (なお、キーとなる3桁の数字は、編集後は文字列扱いになっていましたが、それを関数で数字に直すのは、自力でなんとかできました)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 結論的なものではありませんが、一応、ここを検索してみると分かりますが、マクロで、VLOOKUPは、あまり意味がないのです。特に、はっきりとした理由ではないのですが、引数として、Rangeオブジェクトの範囲を常に入れておく入れたりしても、VLOOKUPでは、途中で面倒になってしまうのです。 A1:C10  A  B  C あ  1  11 い  2  12 う  3  13 え  4  14 お  5  15 か  6  16 き  7  17 く  8  18 け  9  19 こ  10  20 E い あ う ------------------------------- 'Vlookup 関数を使わないで、検索する方法 Sub Test1() Dim i As Variant Dim c As Variant Dim myData As Range Set myData = Range("A1:C10") 'Application.ScreenUpdating = False For Each c In Range("E1", Range("E65536").End(xlUp))  i = Application.Match(c.Value, myData.Columns(1), 0)  If Not IsError(i) Then   'F 列に出力する   c.Offset(, 1).Value = myData.Cells(i, 3).Value  End If Next c 'Application.ScreenUpdating = True Set myData = Nothing End Sub ------------------------------------ それから、 <1>まず、キーとなる数字を編集してから、一番上の行~最終行にかけて、一気にVLOOKUPをかけた方がよいのでしょうか? <2>それともループの中で1行編集するごとに、VLOOKUP関数をキー列の隣に入れていった方がよいのでしょうか? VLookUp を使うのは別として、ループの中で1行ごとにほうが、コードとしては分かりやすいかと思います。 マクロの処理を速くする方法は、 Application.ScreenUpdating = False 'セルにアクセスするコードを入れる Application.ScreenUpdating = True

bari_saku
質問者

お礼

こんにちは。 ここの皆様のお陰で、無事完成しました。 書いて頂いたコードを既存のコードに組み込む方法がわからなくて、結局ループの中でVLOOKUPをかけたのですが、VBAの考え方など非常に参考になりました。 本当にありがとうございました。

関連するQ&A

  • エクセルのVLOOKUP関数について

    エクセルのシート(1)に組合員コード(7桁),氏名,商品,数量・・・が入力してあって、列を挿入し、その組合員コードの左3桁を表示するLEFTの文字列関数を入力します。 それによって3桁が表示され、その3桁のコードは、支店コードを意味するので、シート(2)に支店コード、支店名が入力してあるのでそこから参照するようにシート(1)の3桁が表示されている隣に新たに列を挿入し、シート(2)の支店コードから支店名を引き出すようにVLOOKUP関数を入力したら、「N#A」という表示が出て支店名が表示されません。 LEFT関数によって表示された文字列だと「N#A」で支店名が表示されないのですが、自分で3桁の数字を入力すると支店名が表示されます。 3桁の文字列の結果の値だけをコピーしても、「N#A」が表示され、支店名が表示されません。 文字列関数によって表示された結果から、VLOOKUPで参照は出来ないのでしょうか? 1つずつ自分で数字を入力するしかないのでしょうか? 他に何か別の方法でも構いませんので、教えていただけないでしょうか?

  • VLOOKUPで#N/Aになってしまいます

    VLOOKUP関数を使って 商品名をA1に入力すると、コードを検索するようにしています。 VLOOKUP(A1,'商品1'!$A$2:$C$60000,2,0) と入力しているのですが、 商品名によっては、ヒットしたり#N/Aとなったりします。 商品名を間違えて入力していることはないです。 なにか式に足りないものがあるのでしょうか? それともデータが多すぎなのでしょうか? それとも商品名が複雑すぎるのでしょうか? '商品1'のA列に入力されている商品名は ローマ字と数字とハイフンが混ざった商品名です。 並び替えで昇降順にしています。 '商品1'には60000行ほどのデータがあります

  • エクセルVLOOKUP関数について

    =IF($B$3="","",IF(ISERROR(VLOOKUP($B$3,注文管理!A$3:AE$9898,4,0)),"客注NO.を確認!",VLOOKUP($B$3,注文管理!$A$3:$AE$9898,4,0))) VLOOKUP関数を使って、上の式を作りました。 B3に入るのは5桁の数字で文字列です。注文管理のA列に5桁の数字が入っており、そこも文字列にしています。 うまくいく数字とうまくいかない数字があるのですが、なぜだかわかりません。 どこがおかしいのかおしえてください。

  • VLOOKUP 検索値 2つ

    掲題の件につきまして、御教示ください。 検索値に2つの列を持ってきたい場合、 (例) 日付と数字の列が2列あり、1/1~12/31でそれぞれ1-10までの数字が入力されています →検索値で1/10の5の行のデータをひっぱてきたい。 フィルターを使って日付ごとにすればVLOOKUP使えるのはわかるのですが、 IF関数などと組み合わせて1/1-12/31すべてまとめて関数処理できますでしょうか? どなたか詳しい方、御教示ください。 よろしくお願いします。

  • VLOOKUP 関数に関連して・・・・

    VLOOKUP 関数に関連して・・・・ Excel のBOOK名 「JAPAN」 があり 中に2Sheetあります。 Sheet 名 は「東京」 と 「日本」です。 Excel のVLOOKUP を使うために、 Sheet 「東京」の カラムBの範囲に 名前を「商品」とつけました。 2Sheet目 の「日本」 の カラム EとFに検索対象があり、範囲に名前「台帳」とつけました。 それで、 VLOOKUP 関数を 2Sheet目 の カラムGに  =Vlookup('東京'!商品,台帳,1,0) と入力すると、 Sheet名がBook名に勝手に置き換えられて しまい、  =Vlookup('JAPAN'!商品,台帳,1,0) となってしまいまい、 #Value! が出てしまいます。 1.この置き換えは問題無いのでしょうか? 2. 問題があるとすれば、どうやればとめられるのでしょうか? 3. 検索値は 数字13桁のJANコードなんですが、 数値あるいは文字列で統一が    必要でしょうか? 環境は   Windows  XP   Office  2003  です。 よろしくお願いいたします。

  • VLOOKUP関数で困っています。

    コード番号の下二桁を取り出して、その値を表から探し出して商品名を表示させる作業をVLOOKUPで設定しようとしていますが、うまくいきません。 おそらく、下2桁を取り出したセルにはRIGHTB関数の計算式が入っており、取り出された2桁の文字列ではなく、計算式を表の中から探し出しているようでN/Aのエラーメッセージです。このような場合、どのようにすればよいのでしょうか。

  • ExcelでのVLOOKUP関数について

    キー1を1000倍したうえで完全一致のVLOOKUP関数を使うと#N/Aエラーが発生します。 表示上は同じように見えますが内部的に異なる値となっているのでしょうか? 試しにエラー行に対して、キーとターゲットとなる当該セルを「=」でつないで確認しても「TRUE」となります。 添付画像は、 検索先としてA列に基準キーを130.168~130.192(step 0.001)で各行へ入力し、B列はA列を1000倍、C列はB列をROUND関数で整数値に丸めたものをキーとしました。 D列にVLOOKUPで参照する値を入力し、E列以降で以下の異なるパターンで値を参照しています。 (1)【E・F列】 ・E列に整数値をキーとして130168~130192(step 1)で入力。 ・E列をキーとしてB~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,B:D,3,FALSE)』 (2)【G・H列】 ・G列にE列/100をキーとして計算。 ・G列をキーとしてA~D列のVLOOKUP関数としています。   『=VLOOKUP(G3,A:D,4,FALSE)』 (3)【I列】 ・E列をキーとしてC~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,C:D,2,FALSE)』 シートを複製し、キーの入力範囲を0.001~0.025(E列は1~25)にした場合はエラーがでませんでした。 その他の確認としてはTEXT、JIS、ASCなどを組み合わせて文字列としたキー同士のVLOOKUPではエラーにならず値を参照できています。

  • VLOOKUP

    こんばんは、お世話になります。 早速ですが、 本来VLOOKUP関数を使う場合(第一引数、第二引数、第三引数)となっています、そこで何ですが A B C D E F G    1 ■入力表    2 商品No 商品名  単価  生産者 最低発注単位 納品予定 3 1 以下自粛その先にある物。 4 4 5 5 6 2 I J K L M N 1 ■マスタ 2商品No   商品名                  単価 3 1  以下自粛のそのさきにあるもの。       12000 4 2  1分で話せ。全裸で。 9800 5 3  いつか成功するから会費を払え。 淫らな心で。 15000 6 4  前向きな怠惰と前向きな惰性 18000 7 まぁこんな感じで表があるのですが。 そこで質問なんですが、この後 =VLOOKUP($B3, $I:$N, 2,0) これだと同じ値が入ってしまいますが(2列目までしか見てないから) =VLOOKUP($B3, $I:$N,6,0) こうすれば6列まで見ることが可能だけど、余談なんですが ビジネスの現場では、このようなVLOOKUP関数の入力と第三引数の修正が50列にわたるケースもあるそうです。 そこで第三引数にも参照を使うのですが長くなりましたがここで質問ですが、 A B C D E F G    1 ■入力表  2 3 4 5 6  2 商品No 商品名  単価  生産者 最低発注単位 納品予定 3 1 以下自粛その先にある物。 4 4 5 5 6 2 Cの1列目に数字を入れるのですが、 =VLOOKUP($B3,$I:$N,C$1.0)と関数を入力することによって Cの一列目を参照するとあるのですが、 Cの一列目には先ほど入れた数字しかないのにそこを参照して なぜ元々も情報を参照することができるのでしょうか? ご教示お願いします。

  • vlookupでコピーすると・・

    A列にコードナンバー。B列に商品名を出したく、 VLOOKUPでなんとか出来ました。 でも1行だけでは困るので、下の列にもコピーしたいのです。 検索値の後、範囲のところで、範囲設定し、すぐにF4を押し、 列番号2にして、OK。 B列をずずっと下にコピーすると #N/A  と出てきます。 これで、A列に数字を入れるとB列に商品名が入りますが、 #N/A がずっと見えていておかしいです。 これを見えなくする方法を教えて下さい。 上に書いた手順に間違いがあればぜひご指摘ください。 よろしくお願いいたします。

  • エクセルのVLOOKUP関数

    エクセルでVLOOKUP関数を使ってます。 一般的には、たとえば製品番号(数字)を入力すると 製品名(文字列)を引いてくるという使い方でVLOOKUP 関数を設定すると思いますが、製品名を入力すると、製品番号を引いてくるように設定しようと思ったらうまくできません。 何かよい方法はありますか?

専門家に質問してみよう