dポイントプレゼントキャンペーン実施中!

はじめて質問させて頂きます。
仕事で商談内容をリスト管理しております。
例えばA商事のデータが複数ありますが最新の日付の行をまるごとマスタシートに関数でとばしたいのですが
どのような関数を使えばよいかわからなく困っております。

また入力シートは日付順で打ち込んではおらず、会社は1000社近くあります。
なのでマスタシートの会社名を指定して引っ張るには数が多く・・・
何か良い方法などありますでしょうか?

「excel 最新のデータ(行)を抽出する」の質問画像

A 回答 (3件)

こんばんは!



画像が小さくて詳細が判らないのですが、
全ての会社の最新データを表示すれば良いのでしょうか?

やり方だけ・・・
↓の画像のように元データはSheet1にあり、Sheet2に表示するとします。
まずSheet1に作業用の列を2列設けます。
作業列1は「会社名」を重複なしに表示させるための列で
作業列2が各データを表示させる列になります。

作業列1のJ4セルに
=IF(COUNTIF(B$4:B4,B4)=1,ROW(),"")

作業列2のK4セルに
=IF(B4="","",IF(F4=MAX(IF(B$1:B$2000=B4,F$1:F$2000)),B4,""))
配列数式ですので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は
上記数式をドラッグ&コピー → K4セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定!

J4・K4セルを範囲指定 → K4セルのフィルハンドルでずぃ~~~!っと下へ
これ以上データはない!というくらいまでコピーしておきます。

次にSheet2のB1以降の項目名は必要項目のみSheet1と同じ項目名を入力しておきます。
A2セルに
=IFERROR(INDEX(Sheet1!B:B,SMALL(Sheet1!J:J,ROW(A1))),"")

B2セルに
=IF($A2="","",INDEX(Sheet1!$A:$I,MATCH($A2,Sheet1!$K:$K,0),MATCH(B$1,Sheet1!$3:$3,0)))
という数式を入れ必要列分右へフィルハンドルでコピー!
日付列の表示形式は好みの「日付」にします。
最後にA2~H2セルを範囲指定 → H2セルのフィルハンドルで下へコピーすると
画像のような感じになります。

※ 参照先セルが空白の場合は「0」が表示されます。
オプションの詳細設定から「ゼロ値のセルにゼロを表示する」のチェックを外せば
「0」は表示されません。m(_ _)m
「excel 最新のデータ(行)を抽出する」の回答画像3
    • good
    • 0

A商事のデータだけをみたいということでしたら、フィルタをかけてA商事だけを表示すればよいかと。

    • good
    • 0

案がありますので、紹介させてもらいます。


 同一日に同一会社の情報は1つしかないという条件でやりますので、複数ある場合は使えないかもしれません。
 また、同一名の会社が複数複数ある場合にも使えませんので、その場合は都道府県&会社名といったセルを追加する必要があります。
 最新の日付というのは、リスト内の訪問日が最新という意味でしょうか?

※リストの左端に列を挿入できるものとして記載します。

新A行にそのデータのIDを表示させる式を入力します。
その準備として、リストの右端等でいいですので、「その行の会社がリストの上からその行までに何回出てきたか」と「その行までに存在する会社の数がいくつか」を表示する作ります。
リストはI列まででしょうか? J以降は空いているとして書かせてもらいます。
(各列4行目の例を示しますが、当然リストの下端までコピーしてください)
旧J4=COUNTIF(旧B$4:旧B4,旧B4) 途中の$は忘れずに付けてください。
 これは、その行の会社名が旧B4からその列までの間にいくつあるかを表しています。
旧K4=IF(旧J4=1,旧K3+1,旧K3) ただし、旧K3に列の名称を入れたい場合は、旧K4についてのみ最初から1を入力し、旧K5以降をこれに習って作ってください。
 これは、その行の会社名が初めて出てきた時にカウントを1増やす。つまりその行までに出てきた会社名の数を表しています。
旧L4=IF(旧J4=1,旧K4,VLOOKUP(旧B4,旧B:旧K,COLUMN(旧K4)-COLUMN(旧B4)+1,FALSE))
 COLUMN(旧K4)-COLUMN(旧B4)+1というのは、旧B4を1列目として旧K4が何列目になるかを計算しています。列がその後追加されないと分かっている場合、その数字を直接入力でもかまいません。BとKなら10ですね。
 この式はその行に会社名が初めて出てきた時に、その行までに出てきた会社名の数を表示し、初めてではない場合は会社名が最初に一致する行でのその数を表示する。というものです。 つまり、会社名のID番号と言えるでしょう。
そして新しく追加した新A列に、会社のIDとその会社が何回目に表示されたかを組み合わせて表示させます。
新A4=旧L4&”-”&旧J4
 例の場合、A商事(会社ID=1)が1回目に出てきているので1-1となります。B商事が3回目に出てきている行だと2-3といった感じです。
旧M4=IF(旧J4=1,旧F4,IF(旧F4>VLOOKUP(旧L4&"-"&旧J4-1,新A:旧M,COLUMN()-COLUMN(新A4),FALSE),旧F4,VLOOKUP(旧L4&"-"&旧J4-1,新A:旧M,COLUMN()-COLUMN(新A4),FALSE)))
 COLUMN()というのは入力ミスではなく、そのセル自体の列が何列目かを表示します。COLUMNの計算関係は旧L4同様直接数字でも結構です。
 この式は、その会社名が初めて出てきた場合、その訪問日を表示します。2回目以降であるならば、「今回の訪問日」と「リスト上でその会社が前回出た行で旧M列に表示した日付」を比べて、大きい方=新しい方を表示します。
 つまり、日付の順序に関係なく、その行より上の行で、その会社に訪問した日が最も新しい日を表示します。
旧N4=IF(旧M4=旧F4,新A4,VLOOKUP(旧L4&"-"&旧J4-1,新A:旧N,COLUMN()-COLUMN(新A4),FALSE))
 COLUMNについては同様です。
 この式は、先ほど出したその行までの最新訪問日がこの行の訪問日と等しければ、この行のIDを、等しくなければ「リスト上でこの会社が前回出た行で旧N列に表示したID」を表示します。
 つまり、この行の会社に訪問した日がこの行より上の行で、最も新しい日の行のIDを表示します。
これで下準備は整いました。

次にマスターシートですが、こちらも新A列を追加しておきましょう。
表示させる位置が分かりませんが、タイトル行が同じ3行目にあるものとして考えます。
4行目以降に、会社ID順で最新の情報を表示させる。という形になります。

新A列に表示するデータは、会社のID番号順に「その会社のリスト内で訪問日が最新である行のID」です。
※少し長くなるので、分けて説明します。
新A4=VLOOKUP(検索ID,入力シート!旧A:旧N,COLUMN(入力シート!旧N)-COLUMN(入力シート!旧A+1,FALSE)
 検索IDの部分には↓の式を=より右がわのみ入力します。
検索ID=ROW()-ROW(新A$3)&"-"&COUNTIF(入力シート!旧L:L,ROW()-ROW(新A$3))
 ROWはCOLUMNと同じ使い方をしますが、こちらは行番号を取得します。
 この式は、タイトル行から下に何列目になるかを計算し、「その数字の会社名ID」と「その会社名IDの会社がリスト内にいくつあるか」を-でつないだ物を表示します。
 つまり、その会社がリスト内で一番下にある行のIDとなります。
このIDの行にある旧N列には、「その会社に訪問した、リスト内で最も新しい日付、のある行のID」が表示されているので、それを検索するのが上で書いた式になります。
改めて全体を書くと、
新A4=VLOOKUP(ROW()-ROW(新A$3)&"-"&COUNTIF(入力シート!旧L:L,ROW()-ROW(新A$3)),入力シート!旧A:旧N,COLUMN(入力シート!旧N)-COLUMN(入力シート!旧A+1,FALSE)
となります。

ここに書かれたIDの行のデータを全てとってくればいいので、
旧A~旧Iは全て同じ式で表すことができます。(日付混じりなので、コピーする場合は数式のみで貼り付けた方が直さなくて済みます)
旧A4=VLOOKUP(新A4,入力シート!旧A:I,COLUMN(),FALSE)
あとはこれを会社名の数だけ下にコピーすれば完成です。

長くなってしまったのでわかりにくいかもしれません。
また、途中で打ち間違えてしまっている物もあるかもしれません。
試して不具合が出るようでしたらまたご連絡ください。
(入力にかなり時間がかかりましたので、既に他の回答がでているかも?)
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています