Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
複数条件 vlookup関数 ?
投稿日時: 20/12/09 22:34:44
投稿者: JIRO-KUN

【Sheet1】					
	A列	B列	C列	D列	
1行目	メーカー	品名	品番		
2行目	バナナ	靴	BBK-41956489BL	8	(1)
3行目	みかん	時計	2412NY-DY-NEW-GP	99	(2)
4行目	レモン	エアコン	MSZ2156L	6	(3)
5行目	メロン	テレビ	SNY6688	1	(4)
6行目	いちご	テレビ	VR-333-HD	2	(5)
7行目	りんご	テレビ	REG-5597-FR	3	(6)
8行目	ぶどう	車	GT-1970-NEW	99	(7)
9行目	ぶどう	車	GT-2010-R		(8)
10行目	メロン	リモコン	MBC-240-VT	7	(9)
11行目	いちご	テレビ	VR-555-HD-NEW-WE	99	(10)
12行目	すいか	カメラ	ABC-456		(11)
13行目	すいか	鞄	ABC-124	7	(12)
					
					
【Sheet2】					
	A列	B列	C列	D列	
1行目	メーカー	品名	品番		
2行目			NEW	99	(A)
3行目	メロン	テレビ		1	(B)
4行目	いちご	テレビ		2	(C)
5行目		テレビ		3	(D)
6行目		靴		4	(E)
7行目		時計		5	(F)
8行目		エアコン		6	(G)
9行目			GT-1970-R	7	(H)
10行目			MBC-240-VT	7	(I)
11行目			ABC-123	7	(J)
12行目			ABC-124	7	(K)
13行目			ABC-125	7	(L)
14行目			ABC-126	7	(M)
15行目			ABC-127	7	(N)
16行目			ABC-128	7	(O)
17行目			ABC-129	7	(P)
18行目			ABC-130	7	(Q)
19行目			BBK-41956489BL	8	(R)

 
 
 
「Sheet2」に条件があります。あらかじめ条件を入れておきます。
「Sheet1」のA〜C列に値をいれると「Sheet1」のD列に
「Sheet2」の条件のあった値を返したいです。
「Sheet1」のD列に入れる関数が知りたいです。
 
「Sheet2」の「C2」の値「NEW」のみ「NEWが含まれる場合」です。
 
条件が複雑でややこしいですが、こんな条件でもできますでしょうか。
 
「Sheet1」の説明です。
(1)「Sheet2」「B6」に"鞄"がありますが「C19」にこの品番があるので品番を優先し「D19」の"8"を返したいです。
(2)「Sheet2」「B7」に"時計"がありますが品番に"NEW"が含まれるので「D2」の"99"を返したいです。
(3)「Sheet2」「B8」の品名に条件が合うので"6"
(4)品名がテレビでメーカーがメロンで、「Sheet2」「A3」「B3」の条件に合うので"1"
(5)(4)と同じで品名がテレビですがメーカーがいちごと条件が合うので"2"
(6)(4)(5)と同じテレビですがメロン、いちごではないので「Sheet2」「B5」の条件で"3"
(7)メーカー、品名の条件はないですが品番に"NEW"が含まれるので「D2」の"99"を返したいです。
(8)どの条件にも当てはまらず、「Sheet2」C列の品番にもないので"空白"("")で。
(9)「Sheet2」「C10」に条件があるので「D10」の"7"
(10)いちご、テレビと条件が合うが、"NEW"が含まれ、この条件を一番に優先売るので「D2」の"99"
(11)(8)と同じで、どの条件にも当てはまらず、「Sheet2」C列の品番にもないので"空白"("")で。
(12)「B6」の"鞄"にも条件が当てはまるが(C12)にこの品番があるので「D12」の"7"
 
第一に優先したいのが
いかなる場合でも、メーカーも品名も条件にあったとしても
品番に"NEW"が含まれてたら"99"を返したいです。
 
"NEW"は「C2」に入れず「Sheet1」D列に入れる関数に直接組み込んでいただいてもOKです。
 
次に優先するのがメーカー、品名が合っていたとしても品番が同じならその品番を優先したいです。
 
 
(A)品番に"NEW"が含まれていたら"99"
(B)品番が何であってもメーカーが"メロン"かつ、品名が"テレビ"なら"1"
(C)品番が何であってもメーカーが"いちご"かつ、品名が"テレビ"なら"2"
(D)品番が"テレビ"でメーカーが(B)(C)以外なら"3"
(E)品番とメーカーが何であっても品名が"鞄"なら"4"、しかし品番がC列にある場合は品番を優先する。
(F) (E)と同じ意味
(G) (E)と同じ意味
(H)〜(R)この品番と同じならこのD列を返す。
しかし、品番に"NEW"が含まれていたら"99"を返す。
 
 
条件がひとつでしたらなんとか自分でできそうなんですが複雑なので知恵をお借りしたく、
宜しくお願いします。
 
コードがうまくいかず ずれてますが分かりますでしょうか。
 申し訳ございません。(いつもコードがうまくできません。)
 
 
 
/////////////////
 
【Sheet1】
A列
1行目〜13行目
 
 
メーカー
バナナ
みかん
レモン
メロン
いちご
りんご
ぶどう
ぶどう
メロン
いちご
すいか
すいか
 
B列
1行目〜13行目
 
品名

時計
エアコン
テレビ
テレビ
テレビ


リモコン
テレビ
カメラ

 
 
C列
1行目〜13行目
 
品番
BBK-41956489BL
2412NY-DY-NEW-GP
MSZ2156L
SNY6688
VR-333-HD
REG-5597-FR
GT-1970-NEW
GT-2010-R
MBC-240-VT
VR-555-HD-NEW-WE
ABC-456
ABC-124
 
 
 
D列
1行目〜13行目
 
(空白)
8
99
6
1
2
3
99
(空白)
7
99
(空白)
7
 
E列
1行目〜13行目
(空白)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
 
 
 
【Sheet2】
1行目〜19行目
 
 
A列
メーカー
(空白)
メロン
いちご
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
 
 
B列
品名
(空白)
テレビ
テレビ
テレビ

時計
エアコン
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
 
 
C列
品番
NEW
(空白)
(空白)
(空白)
(空白)
(空白)
(空白)
GT-1970-R
MBC-240-VT
ABC-123
ABC-124
ABC-125
ABC-126
ABC-127
ABC-128
ABC-129
ABC-130
BBK-41956489BL
 
D列
(空白)
99
1
2
3
4
5
6
7
7
7
7
7
7
7
7
7
7
8
 
 
E列
(空白)
(A)
(B)
(C)
(D)
(E)
(F)
(G)
(H)
(I)
(J)
(K)
(L)
(M)
(N)
(O)
(P)
(Q)
(R)
 
 
////////////

回答
投稿日時: 20/12/10 09:56:20
投稿者: んなっと

わかりにくいからほとんど説明を読んでいません。
説明が難しいなら、せめて具体例の表をもう少しうまく貼り付ける努力をしてください。
 
【参考】
メッセージにExcelシートのデータを取り込みましょう!
https://www.moug.net/faq/info_q.html#q5_2
 
本当は作業列を使うべきですが、面倒なので手抜きします。
 
●Sheet2
 
      A     B        C   D
 1 メーカー   品名      型番 品番
 2                 NEW  99
 3  メロン  テレビ           1
 4  いちご  テレビ           2
 5       テレビ           3
 6         靴           4
 7        時計           5
 8      エアコン           6
 9              GT-1970-R   7
10             MBC-240-VT   7
11               ABC-123   7
12               ABC-124   7
13               ABC-125   7
14               ABC-126   7
15               ABC-127   7
16               ABC-128   7
17               ABC-129   7
18               ABC-130   7
19           BBK-41956489BL   8
 
●Sheet1
 
      A     B         C   D
 1 メーカー   品名       型番 品番
 2  バナナ    靴  BBK-41956489BL   8
 3  みかん   時計 2412NY-DY-NEW-GP  99
 4  レモン エアコン     MSZ2156L   6
 5  メロン  テレビ      SNY6688   1
 6  いちご  テレビ     VR-333-HD   2
 7  りんご  テレビ    REG-5597-FR   3
 8  ぶどう    車    GT-1970-NEW  99
 9  ぶどう    車     GT-2010-R   
10  メロン リモコン    MBC-240-VT   7
11  いちご  テレビ VR-555-HD-NEW-WE  99
12  すいか  カメラ      ABC-456   
13  すいか    鞄      ABC-124   7
 
D2
=IFERROR(INDEX(Sheet2!D:D,IFERROR(MATCH(IF(COUNTIF(C2,"*NEW*"),"NEW",C2),Sheet2!C:C,0),MATCH(IF(COUNTIFS(Sheet2!A:A,A2,Sheet2!B:B,B2),A2,"")&"|"&B2,Sheet2!A$1:A$500&"|"&Sheet2!B$1:B$500,0))),"")
下方向・↓

投稿日時: 20/12/10 13:13:02
投稿者: JIRO-KUN

Sheet1
メーカ	品名	品番	
バナナ	靴	BBK-41956489BL	8
みかん	時計	2412NY-DY-NEW-GP	99
レモン	エアコン	MSZ2156L	
メロン	テレビ	SNY6688	
いちご	テレビ	VR-333-HD	
りんご	テレビ	REG-5597-FR	
ぶどう	車	GT-1970-NEW	99
ぶどう	車	GT-2010-R	
メロン	リモコン	MBC-240-VT	7
いちご	テレビ	VR-555-HD-NEW-WE	99
すいか	カメラ	ABC-456	
すいか	靴	ABC-124	7
			
			
			
		NEW	99
メロン	テレビ		1
いちご	テレビ		2
	テレビ		3
	靴		4
	時計		5
	エアコン		6
		GT-1970-R	7
		MBC-240-VT	7
		ABC-123	7
		ABC-124	7
		ABC-125	7
		ABC-126	7
		ABC-127	7
		ABC-128	7
		ABC-129	7
		ABC-130	7
		BBK-41956489BL	8

 
 
 
 
んなっと様
回答ありがとうございました。
わかりにくくて申し訳ございませんでした。
 
今まで表の張り付け方の手順が間違ってました。
 
Sheet1 の D4〜D7 が空白になってしまいます。
 
/////
 
Sheet1 D4 はSheet2 の8行目の品名"エアコン"に該当するので"6"
 
Sheet1 D5 はSheet2 の3行目のメーカーがメロン、品名がテレビに該当するので"1"
 
Sheet1 D6 はSheet2 の4行目のメーカーがいちご、品名がテレビに該当するので"2"
 
Sheet1 D7 はSheet2 の4行目の5行目の品名がテレビに該当するので"3"
 
/////
 
NEW と 品番についてはうまくできているのですが・・・。
条件が多すぎでしょうか。

回答
投稿日時: 20/12/10 18:51:44
投稿者: んなっと

空白セルには、その列の最大文字数(全角換算)と同じ数の「全角スペース」を入れる。

回答
投稿日時: 20/12/10 19:00:07
投稿者: WinArrow
投稿者のウェブサイトに移動

Sheet1側からSheet2を検索しなければ条件がわからない
という考え方は、どうかと思います。
発想を逆にして、VBAで対応したほうがよいのではないでしょうか?

回答
投稿日時: 20/12/10 19:13:54
投稿者: んなっと

引用:
空白セルには、その列の最大文字数(全角換算)と同じ数の「全角スペース」を入れる。

↑これはブラウザで表示したときの見栄えについて書いたものです。
 
内容自体は一般機能で対応できますが、いかんせん状況がわかりにくい。

投稿日時: 20/12/10 21:37:21
投稿者: JIRO-KUN

関数を言葉にすると、
 
「A列のメーカーとB列の品名に一致せず、
B列の品名のみに一致するものがあればその品名の行のD列の値を返す。
でも、A列のメーカーとB列の品名に一致すればそのメーカーと品名の行のD列の値を返す。
しかし、A列のメーカーとB列の品名と一致またはB列の品名のみでも一致していたとしてもC列の品番に一致していれば
その一致している品番の行のD列の値を返す。
でも、今までの条件であっても品番に"NEW"の文字が含まれていれば"99"を返す。
そしてどの条件にも当てはまらない場合は"空白"にする。」
 
言葉にしてみてもわかりずらかったです。
すみません。
んなっとさんに教えていただいた先の関数を使用し、
作業列を増やし、このあとどうにかうまく展開ができるかちょっと考えてみます。

回答
投稿日時: 20/12/10 21:41:15
投稿者: んなっと

はい、どうやらこちらの解釈であっていたみたいです。
よかった。

投稿日時: 20/12/10 22:46:17
投稿者: JIRO-KUN

【Sheet1】								
	A列	B列	C列	D列				
1行目	メーカー	品名	品番					
2行目	バナナ	靴	BBK-41956489BL	8				
3行目	みかん	時計	2412NY-DY-NEW-GP	99				
4行目	レモン	エアコン	MSZ2156L					
5行目	メロン	テレビ	SNY6688					
6行目	いちご	テレビ	VR-333-HD					
7行目	りんご	テレビ	REG-5597-FR					
8行目	ぶどう	車	GT-1970-NEW	99				
9行目	ぶどう	車	GT-2010-R					
10行目	メロン	リモコン	MBC-240-VT	7				
11行目	いちご	テレビ	VR-555-HD-NEW-WE	99				
12行目	すいか	カメラ	ABC-456					
13行目	すいか	鞄	ABC-124	7				
								
	↓	↓	↓	↓	↓	↓	↓	↓
【Sheet1】								
	A列	B列	C列	D列	E列	F列	G列	H列
1行目	メーカー	品名		品番				
2行目	バナナ	靴	バナナ靴	BBK-41956489BL	8			8
3行目	みかん	時計	みかん時計	2412NY-DY-NEW-GP	99			99
4行目	レモン	エアコン	レモンエアコン	MSZ2156L			6	6
5行目	メロン	テレビ	メロンテレビ	SNY6688		1		1
6行目	いちご	テレビ	いちごテレビ	VR-333-HD		2		2
7行目	りんご	テレビ	りんごテレビ	REG-5597-FR			3	3
8行目	ぶどう	車	ぶどう車	GT-1970-NEW	99			99
9行目	ぶどう	車	ぶどう車	GT-2010-R				
10行目	メロン	リモコン	メロンリモコン	MBC-240-VT	7			7
11行目	いちご	テレビ	いちごテレビ	VR-555-HD-NEW-WE	99			99
12行目	すいか	カメラ	すいかカメラ	ABC-456				
13行目	すいか	鞄	すいか鞄	ABC-124	7			7
								
								
								
【Sheet2】								
	A列	B列	C列	D列	E列			
1行目	メーカー	品名		品番				
2行目	                  	                  		NEW	99			
3行目	メロン	テレビ	メロンテレビ	                  	1			
4行目	いちご	テレビ	いちごテレビ	                  	2			
5行目	                  	テレビ	テレビ	                  	3			
6行目	                  	靴	靴	                  	4			
7行目	                  	時計	時計	                  	5			
8行目	                  	エアコン	エアコン	                  	6			
9行目	                  	                  		GT-1970-R	7			
10行目	                  	                  		MBC-240-VT	7			
11行目	                  	                  		ABC-123	7			
12行目	                  	                  		ABC-124	7			
13行目	                  	                  		ABC-125	7			
14行目	                  	                  		ABC-126	7			
15行目	                  	                  		ABC-127	7			
16行目	                  	                  		ABC-128	7			
17行目	                  	                  		ABC-129	7			
18行目	                  	                  		ABC-130	7			
19行目	                  	                  		BBK-41956489BL	8			


 
 
Sheet1とSheet2の両方のSheetのB列とC列の間に1列、列を挿入し(C列)、
どちらものSheetのC2に
 
 =A:A&B:B
下方向・↓
 
Sheet1の
D列からE列に移動したE列の空白を埋めるために、
F列に新しく関数を追加、
その関数が分からないのですが、
「 =もしE2が空白ならSheet1のC2に合った文字がSheet2のC列にあればその行のE列の値を返す。合ったものが無ければ空白。」
(これはメーカと品名の一致の検索)
 
次に
Sheet1のG列に
「 =E2とF2が空白ならB2の品名をSheet2の品名(C列のほう)に合っていればその値を返す。合ったものが無ければ空白。」
(これは品名の一致の検索)
 
 
そしてH2に 
 =E:E&F:F&G:G
下方向・↓
 
こんな方法はどうでしょうか?
作業列が多くて変でしょうか?
 
あと、F2とG2に入れる関数を教えて欲しいです。

回答
投稿日時: 20/12/10 22:51:26
投稿者: んなっと

もう回答しましたよ?試しましたか?

投稿日時: 20/12/10 23:09:50
投稿者: JIRO-KUN

→空白セルには、その列の最大文字数(全角換算)と同じ数の「全角スペース」を入れる。
の部分ですよね?
 
Sheet2の
A2、A5〜A19 (全角スペース3個)→「   」
B2、B9〜B19 (全角スペース4個)→「    」
C3〜C6 (全角スペース7個)→「       」
 
入れましたが
 
しかし、Sheet1 の D4〜D7 が空白になってしまいます。
回答に対する私の解釈が間違ってるのかも。
 
→「全角スペース」を入れる。は、
質問するのにExcelを貼り付ける方法のことかも?

回答
投稿日時: 20/12/10 23:56:51
投稿者: んなっと

空白セルには、その列の最大文字数(全角換算)と同じ数の「全角スペース」を入れる
これは関係ありません。最初の回答を試してください。

投稿日時: 20/12/11 00:16:46
投稿者: JIRO-KUN

Sheet1のD2 に、
 
 =IFERROR(INDEX(Sheet2!D:D,IFERROR(MATCH(IF(COUNTIF(C2,"*NEW*"),"NEW",C2),Sheet2!C:C,0),MATCH(IF(COUNTIFS(Sheet2!A:A,A2,Sheet2!B:B,B2),A2,"")&"|"&B2,Sheet2!A$1:A$500&"|"&Sheet2!B$1:B$500,0))),"")
 
下方向・↓
 
しかし
Sheet1 の D4〜D7 が空白になってしまいます。
なにか手順による私の些細なミスなのでしょうか。
 
先に追記させていただきましたが、
/////
   
Sheet1 D4 はSheet2 の8行目の品名"エアコン"に該当するので"6"
   
 Sheet1 D5 はSheet2 の3行目のメーカーがメロン、品名がテレビに該当するので"1"
   
 Sheet1 D6 はSheet2 の4行目のメーカーがいちご、品名がテレビに該当するので"2"
   
 Sheet1 D7 はSheet2 の4行目の5行目の品名がテレビに該当するので"3"
   
 /////
 
これが反映されないのです。

投稿日時: 20/12/11 01:25:33
投稿者: JIRO-KUN

 
なんとかできました。
作業列が多くて不細工だと思いますが。
 
Sheet1はそのままで、
Sheet2のB列とC列の間に1列、列を挿入し(C列)
新しくできた作業列C列に
 =A:A&B:B
下方向・↓
 
 
D2
 =IFERROR(INDEX(Sheet2!E:E,IFERROR(MATCH(IF(COUNTIF(C2,"*NEW*"),"NEW",C2),Sheet2!D:D,0),MATCH(IF(COUNTIFS(Sheet2!A:A,A2,Sheet2!B:B,B2),A2,"")&"|"&B2,Sheet2!A$1:A$500&"|"&Sheet2!B$1:B$500,0))),"")
 
E2
 =A:A&B:B
 
F2
 =IFERROR(VLOOKUP(E2,Sheet2!$C$2:$E$21,3,FALSE),"")
 
G2
 =IFERROR(VLOOKUP(B2,Sheet2!$B$2:$E$21,4,FALSE),"")
 
H2
 =IFERROR(VLOOKUP(B2,Sheet2!$C$2:$E$21,3,FALSE),"")
 
I2
 =IF(D2="",F2,D2)
 
J2
 =IF(G2=H2,H2,H2)
 
K2
 =A:A&B:B&C:C
 
L2
 =IF(K2="","",(IF(I2="",J2,I2)))
 
 
D2〜L2
下方向・↓
 
L列が求めたかった値です。
 
んなっと 様の初めに教えていただいた関数があったからこそなんとかできました。

回答
投稿日時: 20/12/11 09:46:36
投稿者: んなっと

●Sheet2
 
      A     B        C   D
 1 メーカー   品名      型番 品番
 2                 NEW  99
 3  メロン  テレビ           1
 4  いちご  テレビ           2
 5       テレビ           3
 6         靴           4
 7        時計           5
 8      エアコン           6
 9              GT-1970-R   7
10             MBC-240-VT   7
11               ABC-123   7
12               ABC-124   7
13               ABC-125   7
14               ABC-126   7
15               ABC-127   7
16               ABC-128   7
17               ABC-129   7
18               ABC-130   7
19           BBK-41956489BL   8
 
●Sheet1
 
      A     B         C   D
 1 メーカー   品名       型番 品番
 2  バナナ    靴  BBK-41956489BL   8
 3  みかん   時計 2412NY-DY-NEW-GP  99
 4  レモン エアコン     MSZ2156L   6
 5  メロン  テレビ      SNY6688   1
 6  いちご  テレビ     VR-333-HD   2
 7  りんご  テレビ    REG-5597-FR   3
 8  ぶどう    車    GT-1970-NEW  99
 9  ぶどう    車     GT-2010-R   
10  メロン リモコン    MBC-240-VT   7
11  いちご  テレビ VR-555-HD-NEW-WE  99
12  すいか  カメラ      ABC-456   
13  すいか    鞄      ABC-124   7
 
D2
=IFERROR(INDEX(Sheet2!D:D,IFERROR(MATCH(IF(COUNTIF(C2,"*NEW*"),"NEW",C2),Sheet2!C:C,0),MATCH(IF(COUNTIFS(Sheet2!A:A,A2,Sheet2!B:B,B2),A2,"")&"|"&B2,Sheet2!A$1:A$500&"|"&Sheet2!B$1:B$500,0))),"")
下方向・↓
 
おかしいですね。D4:D7空欄にはならないですよ?
ま、解決したならいいでしょう。さっさと閉じてください。

投稿日時: 20/12/11 12:26:19
投稿者: JIRO-KUN

んなっと 様
他の方もありがとうございました。