プロが教えるわが家の防犯対策術!

いつもお世話になっております。
エクセル VLOOKUP検索で一番新しいデータを表示させたいです。

エクセルで、会社名を入れると処理番号を履歴から自動的に表示させるようにしているのですが、処理番号が随時新しくなるので、一番下のデータを表示させたいです。

現状は一番上の古いデータを拾って来てしまいます。

どういう処理が一番適切でしょうか。別列でカウントさせたりしたのですが、カウントと会社名で検索が上手くいかず・・・

毎度初歩的で申し訳ありませんが、宜しくお願い致します。

「エクセル VLOOKUP検索で一番新しい」の質問画像

質問者からの補足コメント

  • うーん・・・

    処理番号列に、社名を入れた時点で、I列に新しい処理番号を表示させたいです。
    宜しくお願いします。

    現在、=IFERROR(VLOOKUP($G832,G:I,3,FALSE),"")で一番上の処理番号が表示されます。

      補足日時:2019/08/16 13:12
  • つらい・・・

    失礼しました。参照が逆になっていましたね・・・
    参照を$セル番号で指定して入れましたが、やはり0です。

    =INDEX($G12,COUNTA(I:I))

    もう一息な気がしているのですが・・・

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/08/16 16:35

A 回答 (3件)

No2です。



なさりたいことが、いまいち把握できないのですが……

>現在、=IFERROR(VLOOKUP($G832,G:I,3,FALSE),"")で一番上の処理番号が表示されます。
最初の添付図に示されている関数は(ハッキリとは確認できませんが)
 =IFERROR(VLOOKUP($G10,G:I,6,FALSE),"")
となっているように見えます。
この式の場合は範囲外の参照になるので、結果は必ず空白になるのではと想像しました。


>社名を入れた時点で、I列に新しい処理番号を表示させたいです。
ひょっとして、I列に関数を設定しようというお考えでしょうか?
その場合、表示セルを参照することになるので、仕組みそのものが破綻しているように思えます。(どのような利用方法なのかもわかりませんが・・・)

No2の式はそのようなことは想定していません。
あくまでも、表示セル(=関数を設定するセル)は、被参照セル(範囲)とは異なるものと想定しています。


>/で割るのはなぜなのでしょうか!?
指定の会社名で検索するものと仮定していますので、(例示の表ではG列がみな同じ会社名のようにも見えますが)異なる会社名のデータの場合は分母がFALSE(=0)となり、結果がエラー値となることを利用して、指定の会社名のデータだけが抽出対象となるようにするためです。
とは言え、上記のように矛盾を含む利用は想定していませんので、例示の表のI列に式を設定しても上 計算は出来ないはずです。
参照する元データとは別のセルに設定すれば動作するはずです。
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。分かりづらくて申し訳ありません。。
はい、このエクセルシートが台帳になっており、直接入力してI列に直接関数を入れて表示させようとしていました。
仕組み自体が駄目なんですね・・・

/で割ってエラーにさせるご説明もありがとうございます。

一度閉じて再度再考してから質問しなおしたいと思います。
ありがとうございました!

お礼日時:2019/08/19 13:48

こんにちは




>一番下のデータを表示させたいです。
添付図に記されている関数式は、自分を参照するようになっているし、指定列が範囲外になっていて、意味不明のものになっているので、なさりたいことがはっきにしませんでした。
ひとまず、「会社名が指定の名と一致するデータのうち、行番号が一番大きなものを採用したい」という意味に解釈しました。

ちなみに、Vlookupで一致検索をすると、最初にヒットしたデータを採用しますので、ご質問文のような結果になります。
ですので、データの順を逆にしておけば、これをそのまま利用することができるようになると思われます。
つまり、現状では新しいデータを最下行に追加する形式で運用しているものと推測しますが、これを、「新しいデータは常に2行目に追加挿入する」という運用にすることで実現できるでしょう。

さて、ご質問の添付図が元データなのか、結果を表示する表なのかわかりませんが、仮に、これを元データとして、この表から「指定の会社名のデータのうち最下行にあるデータを取得」する方法についてです。
元データが違う場合でも、これを応用すれば出来るものと思います。

G列が検索対象とする会社名の列で、I列が参照したいデータと仮定します。
指定の会社名を「指定社名」とするなら、結果を表示したいセルに、
=IFERROR(INDEX(I:I,AGGREGATE(14,6,INDEX(ROW($G$2:$G$99)/($G$2:$G$99=指定社名),,),1)),"")
とすることで、求めるデータが得られるものと思います。

※ エクセル環境が手元にないので、机上での回答のため、未検証です。
また、誤記等を含むかも知れませんが、ご容赦願います。
    • good
    • 0
この回答へのお礼

ありがとうございます!
=指定社名のところは検索対象の社名の$Gセルで良かったですよね?
0と表示されてしまいます。もう少し色々いじってみます。
 
教えていただきたいのですが、ROW($G$2:$G$99)/($G$2:$G$99=指定社名),,)ですが、/で割るのはなぜなのでしょうか!?
勉強不足ですみません。。

お礼日時:2019/08/16 16:38

> 一番新しいデータを表示させたいです。


そのデーターに大小関係があり、且つ新しいほど大きい、と言うのであれば、
MAX関数で良いはずです。
会社メイト関連しているのであれば、SUMPRODUCT関数が良いと思います。

> 一番下のデータを表示させたいです。
例) =INDEX(B:B,COUNTA(A:A))
この例は、A列の最終行に位置するB列の内容を返します。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます!
MAXとSUMPRODUCTを組み合わせるという事でしょうか?

=INDEX(G:G,COUNTA(I:I)) で入れてみましたが0と表示されてしまいます。。

お礼日時:2019/08/16 13:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!