【エクセル】商品管理を行いたいのですが、「A」というシートから

「B」という商品データが書き込まれたシートを参照し、JANコードを
元に各データを引っ張りたいと思います。

普通なら

=IF($A2=””,””,VLOOKUP($A2,商品データ!$1:$1000,3,FALSE))

など書けばいいと思いますが、A列以外の場所(例えばF列)に
見るべきJANコードが有る場合はどうすればいいでしょうか?

=IF($A2=””,””,VLOOKUP($A2,商品データ!$L$1:$L$1000,3,FALSE))

こういうことはできませんよね?
というか「#REF!」とエラーが出ました。

よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答8件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント10pt

http://www.atmarkit.co.jp/fwin2k/win2ktips/317vlookup/vlookup.ht...

@IT:Windows TIPS -- Tips:VLOOKUP関数でExcel帳票への自動入力を可能にする

VLOOKUPで指定する範囲は、検索ワードと引っ張ってくる文字列がある範囲です。


それが

$L$1:$L$1000

という指定だと、検索するワードの列しか指定しないことになります。


次の 3 というのは 指定された列の3列目という意味です。


列を指定する場合、

コード、内容 という順でないと難しいですね。


なので F列にコードがあるならば

$F$1:$L$1000

という感じに指定したほうがいいでしょう。

id:extrea

すみません。この場合

$F$1:$F$1000

でした。

少し、イメージわきにくいですね。。。

一応イメージとしては

シート「A」・・・自店舗管理の商品管理表

シート「B」・・・メーカー納品データ

シート「A」のJAN欄に入れるだけで必要なデータは

シート「B」から引っ張ってくる。

ただし、JANコードはF列

シート「A」

JAN/分類/メーカー/商品名/品番/数量/コメント

481111111/aaa/ccc/ddd/10/新発売です。

シート「B」

発売日/メーカー/分類/商品名/品番/JANコード/数量

20060101/aaa/bbb/ccc/ddd/481111111/10

20060202/eee/fff/ggg/hhh/482222222/10

20060303/iii/jjj/kkk/fff/483333333/10

このようなイメージです。

2006/02/16 09:25:13
id:kumaimizuki No.2

回答回数614ベストアンサー獲得回数31

ポイント15pt

http://www.hatena.ne.jp/list

人力検索はてな - 質問一覧

1.商品データ一覧の頭(1列目)に名前を設定する


例)

   A    B    C    ・・・ F

1 入荷日 出荷日 商品名 ・・・JANコード

2 ○○○ ××× ☆☆☆ ・・・XXXX

3 △△△ ■■■ XXX   ・・・XXXX


2.入力する箇所の1つ上のセル(A1)に「見るべきJANコード」が記載してあるタイトル(例の場合『JANコード』)を記入する。


3.表示したいセルに以下のように記載します。


=IF($A2=””, ””, DGET(商品データ!$A$1:$L$1000, 3, $A1:$A2))


データがどの列まであるのか分からないので、A~Lにしましたが・・・。

これで出来ると思いますよ。

id:extrea

軽く見ただけでちゃんと検証していないのですが、

1列目はうまくいったのですが、2列目以降がうまくいきません。

少し調べてみます。。。

2006/02/16 09:42:35
id:aki73ix No.3

回答回数5224ベストアンサー獲得回数27

ポイント15pt

http://www.excel.studio-kazu.jp/lib/e1tw/e1tw.html

�G�N�Z���̊w�Z�FVLOOKUP(e1tw)

extreaさんが、Lと書いたのは参照する場所です IF($A2=””,””,VLOOKUP($A2,商品データ!$L1:$L$1000,3,FALSE)) としているので、その範囲の3列目のデータを参照すると範囲外なので#REF!になります


IF($A2=””,””,VLOOKUP($A2,商品データ!$1:$1000,3,FALSE)) の意味は IF($A2=””,””,VLOOKUP($A2,商品データ!$A1:$IV1000,3,FALSE)) と同じです(つまり横方向全部)

L列に参照すべきデータがあるならば

IF($A2=””,””,VLOOKUP($A2,商品データ!$A1:$L1000,12,FALSE)) (←Lは12番目なので)

とすべきです

もしF列にA2の参照テーブルがありL列に結果が

入っているのであれば

IF($A2=””,””,VLOOKUP($A2,商品データ!$F1:$L1000,7,FALSE)) となります

LはFから見て7番目 (F=1,G=2,H=3,I=4,J=5,K=6,L=7なので)になるわけです

id:extrea

ありがとうございます。

徹夜明けの頭にはすんなりと入らないようで。。。

もう少し、頭がさえている時に見直させて頂きますね。

2006/02/16 09:46:11
id:taknt No.4

回答回数13539ベストアンサー獲得回数1198

ポイント5pt

Vlookupの機能上、


発売日/メーカー/分類/商品名/品番/JANコード/数量


の列で、JANコードから商品名などを引っ張ってくるのは 無理です。


JANコード/発売日/メーカー/分類/商品名/品番/数量


というように 先頭に JANコードを持ってくれば、どの項目も持ってこれます。

ただし、

範囲に A:G まで指定しないとダメですが。

id:extrea

ありがとうございます。

vlookup以外で、出来そうな機能がないか質問させて頂きました。

そんな機能は無いですかね?

2006/02/16 09:48:33
id:Asuca No.5

回答回数281ベストアンサー獲得回数4

ポイント30pt

http://arena.nikkeibp.co.jp/lecture/20040322/108253/

一覧表を“縦横”に調べ、該当するデータを取り出す / デジタルARENA

MATCH、INDEX、VLOOKUPを組み合わせれば可能です

id:extrea

ありがとうございます。

組み合わせですね

2006/02/16 15:24:01
id:amadeous No.6

回答回数144ベストアンサー獲得回数3

ポイント15pt

http://www.moug.net/skillup/buef/kn006-1.htm

�u���b�V���A�b�v�IExcel�֐��@���[�O�X�L���A�b�v�u��

ちょっとめんどくさいですが、INDEX関数とMATCH関数を組み合わせればできないこともないです。

たとえば、「分類」のセルには

=INDEX(B!$C$2:$C$1000,MATCH($A$2,B!$F$2:$F$1000,0),1)

と入力。

他の項目については、「$C$2:$C$1000」の部分を、Bシートの該当する範囲に変えて入力する。

これで、できると思いますが?

id:extrea

出来ました!

ありがとうございます。

VLOOKUP関数を使うものとばかり

思いこんでいたのでハマりました

2006/02/16 15:41:34
id:t111 No.7

回答回数68ベストアンサー獲得回数0

ポイント15pt

VLOOKUP以外の方法ではINDEXとMATCHを組み合わせて使う方法があります。

たとえば、F列のコードを検索してA列の値を得る場合は次のようになります。


=INDEX(商品データ!A:A,MATCH($A2,商品データ!$F:$F,0))


この方法ならJANコードは昇順にソートされている必要はないし、検索する列の左側の値も取り出せます。

また、URLで紹介されている例のように縦と横の両方から表引きすることもできます。

http://arena.nikkeibp.co.jp/lecture/excel36/20020521/01/

WPC ARENA / 一覧表を“縦横”に調べ、該当するデータを取り出す

http://zeronao.seesaa.net/article/6939675.html

エクセルの家庭教師: INDEXとMATCH関数

id:extrea

なるほど!

NDEXとMATCHを組み合わせならソートの

必要なしですか。

まさしく自分の環境にマッチしています。

元の商品リストは発売順に並んでいるので

JANでソートさせたくなかったのです。

2006/02/16 15:43:01
id:rikuzai No.8

回答回数1366ベストアンサー獲得回数141

ポイント30pt

http://www2.moug.net/bbs/exopr/

Excel���ʋ@�\ Q&A�f����

開けてもらえるかな…(^_^.)


Sheet1(納品データ)

商品名 JAN 単価

-----------------------------

EN-LLL555 1234 500

MK500-PPP 5678 600


Sheet2(商品管理)

JAN 単価 商品名

--------------------------

1234 500 EN-LLL555


だとして、

Sheet2の

B2=INDEX(Sheet1!A$2:C$3,MATCH(A2,Sheet1!B$2:B$3,0),3)

C2=INDEX(Sheet1!A$2:C$3,MATCH(A2,Sheet1!B$2:B$3,0),1)

以下コピーでどうでしょうか。


INDEXは検索範囲に対して、行番号と列番号を指定して値を取り出す関数、

MATCHは検索範囲内に対して条件に合致した行番号を取り出す関数です。

id:extrea

わかりやすい例ありがとうございました。

あと、

B2=INDEX(Sheet1!A$2:C$3,MATCH(A2,Sheet1!B$2:B$3,0),3)

C2=INDEX(Sheet1!A$2:C$3,MATCH(A2,Sheet1!B$2:B$3,0),1)

末尾の1,3等の値が気になったので調べてみたのですが

領域番号なのですね。勉強になりました。

先ほどまでの回答で

INDEX(Sheet1!$B$1:$B$1000,MATCH($A2,Sheet1!$L$1:$L$1000,0),1)

INDEX(Sheet1!$C$1:$C$1000,MATCH($A2,Sheet1!$L$1:$L$1000,0),1)

INDEX(Sheet1!$D$1:$D$1000,MATCH($A2,Sheet1!$L$1:$L$1000,0),1)

とめんどくさい事をやっていたので、末尾だけ変えれば

良いとは大助かりです

2006/02/16 15:55:25

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません