• ベストアンサー

Excelで、条件と一致する最後のセルを検索したい

Excelで、条件と一致する最後のセルを検索したいのですが、どの関数をどのように使えばいいかわかりません。 どなたかお力をお貸し下さい。 問) 日付  社名  品名  個数 1/1   A    あ    1 1/1   C    い    2 1/2   B    う     3 1/2   A    え    4 1/3   C    お    5 1/3   A    あ    3 答) A社の最終購入日は  1/3 あ 3 B社の最終購入日は  1/2 う  3 C社の最終購入日は  1/3 お 5 となるようお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

エクセルには「最後の該当」を検索する関数はありません。 無駄に複雑な数式を駆使すればもちろん「やればできます」が、添付図のようにちょっと工夫するだけで、普段使いの数式だけでやっつけるのがお勧めです。 A2: =IF(OR(C2="",COUNTIF($C$2:C2,C2)<COUNTIF(C:C,C2)),"",C2) 以下コピー 答えは簡単なVLOOKUP関数を使うだけです。 H2: =IF(COUNTIF($A:$A,$G2),VLOOKUP($G2,$A:$E,2,FALSE),"") まぁ一応ご参考に作業列を使わない方法: H2: =IF(COUNTIF($C:$C,$G2),INDEX(B:B,MAX(IF($C$2:$C$999=$G2,ROW($C$2:$C$999))))) と記入し、必ずコントロールキーとシフトキーを押しながらEnterで入力する 説明は省略しますので、ブラックボックスで使ってください。

eaude04
質問者

お礼

早々に有難うございます。 普段よく使う関数で出来るなんて感激です。 本当に助かりました。 有難うございます。

その他の回答 (4)

noname#204879
noname#204879
回答No.5

添付図参照 E2: =A2&"_"&B2 セル E2 を下方にズズーッとドラッグ&ペースト H2: =SUMPRODUCT(MAX((B$2:B$7=G2)*(A$2:A$7))) I2: =INDEX(C:C,MATCH($H2&"_"&$G2,$E:$E,0)) セル I2 を右隣にドラッグ&ペースト 範囲 H2:J2 を下方にズズーッとドラッグ&ペースト

eaude04
質問者

お礼

こんなに短い式で出来るとは思ってもいませんでした。 3日かけても全然わからなかったのに・・・。 有難うございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

配列数式や複雑で分かりにくい数式は計算に負担がかかります。 出来るだけやさしく処理するためには作業列を作って対応することです。 作業列が目障りでしたらその列を選択して右クリックし、「非表示」を選択すればよいでしょう。 お示しの表がシート1に有ってA1セルからD1セルには項目名が日付、社名、品名、個数と並んでいます。 E2セルには次の式を入力して下方にドラッグコピーします。 =IF(B2="","",IF(COUNTIF(B$2:B2,B2)=COUNTIF(B:B,B2),B2,"")) お望みの表をシート2に表示させるとしてA1セルには社名、B1セルには日付、C1セルには品名、D1セルには個数と入力します。 シート2のA2セルから下方には社名を入力します。 B2セルには次の式を入力して右横方向にD2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF($A2="","",INDEX(Sheet1!$A:$D,MATCH($A2,Sheet1!$E:$E,0),IF(COLUMN(A1)=1,1,IF(COLUMN(A1)>=2,COLUMN(A1)+1)))) 最後にB列のデータはシリアル値になっていますので日付の表示形式に変えます。

eaude04
質問者

お礼

わかりやすいご説明有難うございます。 COLUMN関数がよくわからなかったので勉強しました。 ひとつ賢くなりました。 有難うございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! 一例です。 ↓の画像でF列の社名は入力済みだとします。 G2セルに =MAX(IF(B$1:B$100=F2,A$1:A$100)) これは配列数式になりますので、Shift+Ctrl+Enterで確定! この画面からコピー&ペーストする場合はG2セルに貼り付け後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 次にH2セル(配列数式ではありません)に =INDEX(C$1:C$100,SUMPRODUCT(($B$1:$B$100=$F3)*($A$1:$A$100=$G3)*ROW($A$1:$A$100))) という数式を入れ隣のI2セルまでオートフィルでコピー! 最後にG2~I2セルを範囲指定 → I2セルのフィルハンドルで下へコピーで 画像のような感じになります。 尚、エラー処理はしていません。m(_ _)m

eaude04
質問者

お礼

配列数式がわからず、勉強不足ですみません。 これを機に、勉強します。 有難うございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

重複のない社名一覧の抽出を含めて、すべて関数だけで各社名の一番下の行を表示したいなら以下のような関数を使うことになります(セル位置は添付画像参照)。 G2セル(重複のない社名の抽出) =INDEX(B:B,SMALL(INDEX((MATCH($B$2:$B$100&"",$B$2:$B$100&"",0)<>ROW($B$2:$B$100)-1)*1000+ROW($B$2:$B$100),),ROW(A1)))&"" F2セル(日付:セルの表示形式を日付に設定) =IF($G2="","",INDEX(A:A,MAX(INDEX(($B$2:$B$100=$G2)*ROW($B$2:$B$100),)))) H2、I2セルはF2セルの数式をコピー貼り付け(セルの書式を「標準」にする)。

eaude04
質問者

お礼

全て関数だけで出来てしまうなんて驚きです。 この式を使えるようになるよう勉強します。 有難うございました。

関連するQ&A