[[20130418195649]] 『AとBの条件が一致した場合にCを表示したい』(ぬこったれ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『AとBの条件が一致した場合にCを表示したい』(ぬこったれ)
エクセル2003 OS:WINXP

下記のようなAシートがあります。
コードと品番が入力してある別シートに商品名を取り出す関数を教えてください。
1つのコードでしたら、VLOOK関数で取り出せるかと思いますが、
全く思いつきませんでした。

	1	2	3
1	コード	品番	商品名
2	120	1	りんご
3	120	2	夏みかん
4	120	3	春みかん
5	120	2	もも
6	125	1	すいか
7	125	2	りんご

また、下記のようにコード、品番、特番から商品名を取り出す場合は
マクロなどを使用しないと商品名を取り出せないでしょうか?

	1	2	3	4
1	コード	品番	特番	商品名
2	120	1		りんご
3	120	2		夏みかん
4	120	2	20	春みかん
5	120	2	21	もも
6	125	1		すいか
7	125	2		りんご


 このシートがSheet1 で、別シートの A1 にコード、B1 に品番があるとして

 別シートのどこかのセルに

 =INDEX(Sheet1!C1:C1000,MATCH(1,INDEX((Sheet1!A1:A1000=A1)*(Sheet1!B1:B1000=B1),),0))

 特番が追加になっても、同じ要領で。

 (先日の別トピでの、みやほりんさんの回答をパクった。)

 (ぶらっと)

 上の方の例、3行目と5行目、どっちも120と2やけど間違い?

 間違いなら ↓ な感じでもできますけど

 =LOOKUP(1,0/((Sheet1!A2:A100=A1)*(Sheet1!B2:B100=B1)),Sheet1!C2:C100)
 
 
 > 1つのコードでしたら、VLOOK関数で取り出せるかと思いますが
 
 なら1つにすればいいのでは?
 
 	A	B	C	D
1	コード	品番		商品名
2	120	1	120-1	りんご
3	120	2	120-2	夏みかん
4	120	3	120-3	春みかん
5	123	2	123-2	もも
6	125	1	125-1	すいか
7	125	2	125-2	りんご
 
 
 C2 =A2&-B2 下コピー

 別シートに
 =VLOOKUP(A1&-B1,Sheet1!C2:D100,2,FALSE) 
 
 
 下の方の表なら

 D2 =A2&-B2&IF(C2="","",-C2)
 
 
 > C2 =A2&-B2
 > D2 =A2&-B2&IF(C2="","",-C2)

 例では品番と特番は全部数値なんで、それを前提にしてます。

 もし文字列の場合もあるんやったら

 C2 =A2&"-"&B2
 D2 =A2&"-"&B2&IF(C2="","","-"&C2)

 (よみびとしらず)


 VLOOK関数でなく、VLOOKUP関数なんだけどね。

 Sheet1にデータベース、Sheet2で抽出。
 Sheet1が品番-枝番で昇順ならびとして。

 =INDEX(Sheet1!C:C,MATCH(A2,Sheet1!B:B,0)+B2-1)

 (GobGob)

 質問には関係ないが…

 いつから私はみやほりん氏になったんだろうか?
 (ねむねむ)

 最近ってことは原案はねむねむさんです。↓
[[20130416085821]] 『料金表から複数条件内の区間の料金を抽出』(笹)
 
過去にもMATCH関数の引数の配列としてINDEX関数を使った覚えは
あまりないので。
(みやほりん)

 To ねむねむさん、みやほりんさん

 すんませ〜〜〜ん(汗、汗) ペコリの二乗。

 (ぶらっと)

返信遅くなりすいませんでした。
ぶらっとさんの方法で試してみましたが、

コード、品番、特番についてもINDEXとMATCH関数にて取り出した結果のためか、
エラーになってしまいます。
(取り出した結果を数字に置き換えた場合は上手く結果がでました。)

また、同じコード・品番の場合でも特番には必ず番号が入ります。
20と21以外の数字の場合は夏みかんが表示されるようにしたいのですが、
どうしたらよいのでしょうか?

     コード 品番  特番
3 120 2 ? 夏みかん
4 120 2 20 春みかん
5 120 2 21 もも


 >エラーになってしまいます。 

 どんな式に変更したのかを教えてもらわないと何ともいえないねぇ。

 まぁ、その式をアップしてもらったとしても、追加テーマは、20,21 以外は同じと見なすという、
 関数素人のぶらっとには、荷が重そうなテーマなので 専門家の方々の回答を待ってもらった方がいいかもね。

 (ぶらっと)

ぶらっとさんありがとうございます。

>コード、品番、特番についてもINDEXとMATCH関数にて取り出した結果のため
別のシートを参照して、コードと品番と特番をシートに取り出してます。
コードと品番・特番には数字ではなく別シートを参照して取り出すための関数が入ってます。

コードと品番を一つにしたら、VLOOKUPで上手く取り出せますか?
(ぬこったれ)


 >取り出した結果を数字に置き換えた場合は上手く結果がでました。
つまり、原因はそちらが用意しているデータにあります。
検索できる数式を考える(考えてもらう)より、「検索できるデータ」に直したほうが早い。
 
>コード、品番、特番についてもINDEXとMATCH関数にて取り出した結果のため 
INDEX、MATCHで検索している元のデータを直せばいい。
直せない事情があるのなら、コード、品番、特番の元になっているデータが
どういう仕様のデータなのかそちらで調べる必要があると思いますが、いかが?
 
(みやほりん)

>INDEX、MATCHで検索している元のデータを直せばいい。

INDEX、MATCH関数で得たもので当方が求めているものを取り出すことは可能ということ
でしょうか?

参考までに教えていただきたいのですが、
文字列だとエラーになる可能性はありますか?


みやほりんさん
INDEX、MATCHで検索している元のデータですが、どのようなデータに直せば良いのでしょうか?
数字や文字列にしたりと試してみましたが、やはりINDEX、MATCH関数で取り出したコード、品番、特番では品名を取り出そうとすると、#N/Aエラーになってしまいます。
(関数で取り出さず数字を入力すると、きちんと取り出せます)

ちなみにgenkoシートがあり下記のような関数でコード、品番、特番をgenkoシートより取り出してます。
INDEX('genko'!A:A,MATCH(A2,'genko'!C:C,0),1)

genkoシートから取り出したコード、品番、特番から今度は品名シートから品名を取り出したいのです。


 >関数で取り出さず数字を入力すると、きちんと取り出せます
ということが分かっているのだから、論理的に考えると、
「関数で取り出したものは数字ではない」ということになります。
 
新規シートで次の実験をしてみてください。
まずA列の書式設定の表示形式を「文字列」に設定します。
B列は「標準」のままにしておいてください。
A1、B1それぞれにに「1」を入力します。
 
続いて、C1に =A1=B1 という式を入力します。
これは「A1とB1は等しいか?」という問いかけです。
 
等しければTRUE(真)、等しくなければFALSE(偽)がセルに返ります。
この場合はFALSEになります。一方は文字列として1、他方は数値としての1。
 
で、元のデータが文字列で、検索させようとしているデータが数値に
なっている、という推測が成り立ちます。
つまり、両方を文字列か、数値に統一すれば検索できるんじゃないでしょうか。
 
多分、元のデータが文字列扱い(もしくは文字列扱いでスペースなどが含まれている)
と思われるので、元のデータを数値に直すか、
検索文字列を指定するセルを逆に文字列表示形式にするか、どちらかです。
 
ではどうしたらいいかは、元のデータ次第。
元のデータの表示形式を文字列から数値にするだけでは上手く行かない。
まずは自分で調べてみて。
(みやほりん)

みやほりん様
ありがとうございます。

自宅のPCが不調でレスできずすいませんでした。

区切り位置という物がどういうものかよく理解できていないのですが、
区切り位置にて修正するとなぜかうまくいきました。

あとは、下記の問題だけです。
また、同じコード・品番の場合でも特番には必ず番号が入ります。
20と21以外の数字の場合は夏みかんが表示されるようにしたいのですが、
どうしたらよいのでしょうか?

     コード 品番  特番
3 120 2 ? 夏みかん
4 120 2 20 春みかん
5 120 2 21 もも

また、今回のような場合はスレを立て直したほうがいいのでしょうか・・・。


 =INDEX(Sheet1!C1:C1000,MATCH(1,INDEX((Sheet1!A1:A1000=A1)*(Sheet1!B1:B1000=B1),),0))
上記の式を使っているとして、
(Sheet1!A1:A1000=A1)*(Sheet1!B1:B1000=B1)
この部分は「Sheet1!A1:A1000でA1と等しく、かつ Sheet1!B1:B1000でB1と等しい」
という条件設定ということは理解されていると思います。
これに加えて、
「Sheet1!C1:C1000で20と等しくなく、21とも等しくない」という条件設定が
必要です。
検査対象とするシートの未使用の列に =(C1<>20)*(C1<>21) と入れて適当に
フィルコピーすると、C列が20、21の行では0、それ以外では1が計算されます。
 
このことを参考に式の美しささえ気にしなければ、
=INDEX(Sheet1!D1:D1000,MATCH(1,INDEX((Sheet1!A1:A1000=A1)*(Sheet1!B1:B1000=B1)*(Sheet1!C1:C1000<>20)*(Sheet1!C1:C1000<>21),),0))
 
このような式で検索されないでしょうか。
(みやほりん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.