[[20170814143027]] 『キー列が重複する場合は最新の日付からデータを求』(シロックス) ページの最後に飛ぶ

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

 

『キー列が重複する場合は最新の日付からデータを求めたい』(シロックス)

	【日々データ】				
	A	  B	   C	    D	
1    管理ナンバー 商品	  価格   日付	
2	A-0004	 きゅうり 160	   2017/7/20	
3	A-0005	 なす	  150	   2017/7/31	
4	A-0001	 人参	  200	   2017/8/1	
5	A-0001	 人参	  210	   2017/8/5	
6	A-0005	 なす	  170	   2017/8/8	
7	A-0001	 人参	  190	   2017/8/14	
		↓			
	【提出リスト】				
	A	  B	  C	    D	
	管理ナンバー 商品	 最新価格  日付	
1	A-0001	 人参	  190	   2017/8/14	←最新の日付
2	A-0002				
3	A-0003				
4	A-0004	 きゅうり 160	   2017/7/20	
5	A-0005	 なす	  170	   2017/8/8	←最新の日付
6	A-0006				
7	A-0007				
8	A-0008	

キー列である管理ナンバーを元に、最新の日付のデータ(価格)を求める式を教えてください。

最初は「日々データ」から「提出リスト」へ抽出するのにVLOOKUPを使っていましたが、
管理ナンバーが重複する場合は、最新の日付のデータ(価格)を表示させたいのです。

似たような質問をしている方への回答を調べて参考にしようとしまいたが、上手くいきません。
そもそも下記の式では無理があるように感じ(そして混乱)、こちらに質問させていただきました。
INDEX(日々データ!A:D,MATCH(MAX(日々データ!A:A),日々データ!A:D,0),4)  

どうぞよろしくお願いいたします。

< 使用 Excel:unknown、使用 OS:unknown >


 人参価格
 =SUMPRODUCT(MAX((A2:A7="A-0001")*(B2:B7="人参")*(C2:C7)))

 人参最新日付
 =SUMPRODUCT(MAX((A2:A7="A-0001")*(B2:B7="人参")*(D2:D7)))

 なす価格
 =SUMPRODUCT(MAX((A2:A7="A-0005")*(B2:B7="なす")*(C2:C7)))

 なす最新日付
 =SUMPRODUCT(MAX((A2:A7="A-0005")*(B2:B7="なす")*(D2:D7)))
(BJ) 2017/08/14(月) 15:15

BJさん早速のご回答ありがとうございます。

提出リストのA列は既に管理ナンバーが昇順で入っており(その横の商品はVLOOKなどで表示)、
日々データから最新価格と日付を引っぱってきたいので、C及びD列に統一の式を入れたいと考えています。

よってBJさんの式を参考にすると、抽出リスト!C1=SUMPRODUCT(MAX((A2:A7=A2)*(B2:B7=A3)*(C2:C7)))
のようになるのでしょうか。

ただ、BJさんの式をそのまま入れても、私の書いた文字をセルに当てはめた式もエラーになってしまいます。

	【提出リスト】		 	
	A	 B	 C	 D
	管理ナンバー	商品	最新価格	日付
1	A-0001	人参	#VALUE!	       2017/8/14
2	A-0002		#N/A	
3	A-0003		#N/A	
4	A-0004	きゅうり#N/A	       2017/7/20
5	A-0005	なす	#N/A	       2017/8/8
6	A-0006		#N/A	
7	A-0007		#N/A	
8	A-0008		#N/A	

(シロックス) 2017/08/14(月) 15:50


 【日々データ】と【提出リストが別シートなら、
 こんな風にシートを指定してください。

 =SUMPRODUCT(MAX((Sheet2!A2:A7="A-0001")*(Sheet2!B2:B7="人参")*(Sheet2!C2:C7)))
(BJ) 2017/08/14(月) 16:10

 ちょっとお聞きします。
 
【日々データ】の日付(C列)は昇順でっか?
 エクセルのバージョンが書いてまへんけど、2007以降でっか?

 どっちも「イエス」やったら

 C1: =IF($A1="","",IFERROR(LOOKUP(1,0/(日々データ!$A$2:$A$100=$A1),日々データ!C$2:C$100),""))                                    

 隣のD1にコピーして、D1の表示形式を「日付」にする。
 C1とD1を下にコピー
 
(よみびとしらず) 2017/08/14(月) 16:20

BJさん大変失礼しました。できました、ありがとうございます。
ただ、価格は日付の最新日ではなく、最高値を返すようになってしまします。

	【提出リスト】				
	A	  B	  C	    D	
	管理ナンバー 商品  最新価格	日付	
1	A-0001	 人参	  210	   2017/8/14	←最新の日付の価格が欲しいです
2	A-0002		  0	  1900/1/0	
3	A-0003		  0	  1900/1/0	
4	A-0004	 きゅうり 160	  2017/7/20	
5	A-0005	 なす   170	  2017/8/8	←
6	A-0006		  0	  1900/1/0	
7	A-0007		  0	  1900/1/0	
8	A-0008		  0	  1900/1/0
(シロックス) 2017/08/14(月) 16:22

 回答したけど見てくれたんやろか?
 
(よみびとしらず) 2017/08/14(月) 16:40

 =SUMPRODUCT((A2:A7="A-0001")*(B2:B7="人参")*(D2:D7=人参最新日付)*(C2:C7))

 =SUMPRODUCT((A2:A7="A-0005")*(B2:B7="なす")*(D2:D7=なす最新日付)*(C2:C7))

 シートの指定を忘れないように。
(BJ) 2017/08/14(月) 17:00

よみびとしらずさん、BJさんありがとうございます。
出来ました!!

何日も(もしかしら一週間以上)悩んでも出なかったのですごくうれしい気持ちと、
自分がいかに出来ないかがわかりました。

また、ご相談させていただければ嬉しいです。
本当にありがとうございました。
(シロックス) 2017/08/14(月) 17:18


 >【日々データ】の日付(C列)は昇順でっか?

 (D列)でした。わかってくれたんやろか。
 
(よみびとしらず) 2017/08/14(月) 17:49

 今さらな話ですんまへん。
 
【提出リスト】のB列(商品)やけど、B2やB3のように【日々データ】にない商品は数式で「""」にしてるんやったら
 C1とD1のIFERRORは要りまへんな。

 C1: =IF($B1="","",LOOKUP(1,0/(日々データ!$A$2:$A$100=$A1),日々データ!C$2:C$100))

 D1にコピーし、D1の表示形式を「日付」に。
 C1とD1を下にコピー
 
 
 今さらついでに【日々データ】の日付が昇順とは限らん場合。

 D1: =IF(B1="","",MAX(INDEX((日々データ!$A$2:$A$100=A1)*日々データ!$D$2:$D$100,0)))

 表示形式を「日付」に

 C1はエクセルのバージョンによって変わる。

 2007以降ならSUMIFSで
 C1: =IF(B1="","",SUMIFS(日々データ!$C$2:$C$100,日々データ!$A$2:$A$100,A1,日々データ!$D$2:$D$100,D1))

 2003以前ならSUMPRODUCTで
 C1: =IF(B1="","",SUMPRODUCT((日々データ!$A$2:$A$100=A1)*(日々データ!$D$2:$D$100=D1),日々データ!$C$2:$C$100))

 C1とD1を下にコピー
 
(よみびとしらず) 2017/08/15(火) 16:59

コメント返信:

[ 一覧(最新更新順) ]


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