『キー列が重複する場合は最新の日付からデータを求めたい』(シロックス) 【日々データ】 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