• ベストアンサー

Excel MATCH関数で検索範囲内に同じ値の検索値が複数ある場合

MATCH関数で、検索した値が複数ある場合に1つしか出なくて困っています。 (例)    A B C D 1 年月日 種類 番号 備考 2 4月1日 肉類 1 3 4月2日 野菜 2 4 4月3日 肉類 1 5 4月4日 果物 2 6 4月5日 野菜 1 7 4月6日 果物 3 8 4月7日 果物 2 9 4月8日 肉類 1 この表で、D9の備考の欄に「種類:肉類、番号:1」と同じものがあった時の日付を、新しい日付で取り出したいのです。 INDEX(A2:A8,(MATCH(B9,B2:B8,0)+MATCH(C9,C2:C8,0))/2) としたのですが、本当は4月3日を取り出したいのですが、4月1日が出てきます。 どのようにしたら良いでしょうか? Excel2003です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

MATCH関数を使用しませんが、D9の書式を日付にして、 =MAX((A2:A8)*(C2:C8=1)*(B2:B8="肉類")) と、入力してShift+Ctrl+Enterキーで入力完了してみてください(配列式になります)。

ryuu0605
質問者

お礼

回答ありがとうございます。 早速試してみた所、うまく行きました。 またいろいろと聞く機会があると思いますので、よろしくお願いします。 ありがとうございました。

その他の回答 (1)

回答No.2

match関数やlookup関数などの検索関数は、最初に見つけたものを返 すことになっています。2番目が欲しいとか全部欲しいとかはできま せん。 INDEX(A2:A8,(MATCH(B9,B2:B8,0)+MATCH(C9,C2:C8,0))/2) 最初に種類が「肉類」だった行と最初に番号が「1」だった行の中間 の日付を返すって書いてありますね。「種類が肉類で番号が1」では ないです。私なら、最近index関数がマイブームなので、 =index(A$1:A8,max(index((B$2:B8&C$2:C8=B9&C9)*row(B$2:B8),0))) みたいな書き方をします。これはD列でドラッグして、それぞれの行 と同じ内容の直近の日付を返します。

ryuu0605
質問者

お礼

回答ありがとうございます。 今回は、回答1の方法を使わせてもらうことにしました。 MAX関数を使うということが分かり、非常に助かりました。 また質問する機会があると思いますので、よろしくお願いします。 ありがとうございました。

関連するQ&A