• 締切済み

Excel(マクロ?VBA?)で最大日付の行を抽出

Excelのデータ抽出で困っております。 下記のようなデータがあり、各IDの最大日付の行を抽出しようとしていますが、抽出方法がわからず、困っています。  氏名  ID   日付   山田太郎 10 2012/12/01 山田太郎 10 2013/08/01 山田太郎 10 2014/12/01 山田太郎 10 2015/08/01 山田花子 20 2012/12/01 山田花子 20 2013/08/01 山田花子 20 2013/12/01 この際に、 山田太郎 10 2015/08/01 山田花子 20 2013/12/01 という2つの行を抽出したいですが、抽出方法がわかりません。 関数を使ってやろうとも思いましたが、関数をどれを使えばいいかわかりません。 別シートに抽出でも全く問題ありませんので、恐れ入りますが、抽出方法を教えてください。 よろしくお願いいたします。

みんなの回答

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

No6の回答の補足です。 E2セル以下にA列の重複のない名前を自動的に表示するなら、E2セルに以下の式を入力して下方向にオートフィルすることになります。 =INDEX(A:A,SMALL(INDEX((MATCH($A$2:$A$1000&"",$A$2:$A$1000&"",0)<>ROW($A$2:$A$1000)-1)*10000+ROW($A$2:$A$1000),),ROW(1:1)))&"" その場合は、F列およびG列の数式は以下のようにIF関数を使用して、データがない場合は空白表示するようにしてください。 =IF($E2="","",元の数式)

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

添付画像のようなレイアウトなら、G2セルおよびH2セルに以下の式を入力し下方向にオートフィルします。 F2: =VLOOKUP(E2,A:B,2,0) G2: =MAX(INDEX(($A$2:$A$10=E2)*$C$2:$C$10,))

  • Pcworks
  • ベストアンサー率35% (64/179)
回答No.5

>各IDの最大日付の行を抽出しようとしていますが、抽出方法がわからず、困っています。 日付はシリアルナンバーといって基準日から一日づつ足されたものなのでExcelでは数値で扱われてます、最大日付を求めたいなら単純に日付を基準にソート(降順)すれば上から最新(日付の新しい順番、最大日付)の日付で並べ替えられます。 基本的なことを理解していれば作業は簡単です、並べ替えた上から2行のデータを取ればよいのであとはご自分で考えて下さい。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 回答No.3様の方法を使うのが一番良い様な気が致しますが、 >関数を使ってやろうとも思いましたが、 との事ですので、念のため関数と作業列を使用した抽出方法を回答させて頂きます。  今仮に、元データのリストの中で「氏名」と入力されているセルがSheet1のA1セルであるものとします。  そして、Sheet2のA列を作業列として使用して、Sheet3のA列~C列に抽出結果を表示させるものとします。  まず、Sheet2のA2セルに次の様な関数を入力して下さい。 =IF(AND(INDEX(Sheet1!$B:$B,ROW())<>"",ISNUMBER(INDEX(Sheet1!$C:$C,ROW()))),MATCH(INDEX(Sheet1!$B:$B,ROW()),Sheet1!$B:$B,0)*10000000+INDEX(Sheet1!$C:$C,ROW()),"")  次に、Sheet2のA2セルをコピーして、Sheet2のA3以下に貼り付けて下さい。  次に、Sheet3のB2セルに次の様な関数を入力して下さい。 =IF(B1="","",IF(COUNTIF(Sheet1!$B:$B,">"&SUM(B1)),SMALL(Sheet1!$B:$B,COUNTIF(Sheet1!$B:$B,"<="&SUM(B1))+1),""))  次に、Sheet3のA2セルに次の様な関数を入力して下さい。 =IF($B2="","",INDEX(Sheet1!$A:$A,MATCH($B2,Sheet1!$B:$B,0)))  次に、Sheet3のC2セルに次の様な関数を入力して下さい。 =IF($B2="","",MOD(SMALL(Sheet2!$A:$A,COUNTIF(Sheet2!$A:$A,"<"&(MATCH($B2,Sheet1!$B:$B,0)+1)*10000000)),10000000))  次に、Sheet3のA2~C2のセル範囲を纏めてコピーして、Sheet3のA列~C列の3行目以下に貼り付けて下さい。  以上です。  尚、上記の方法はIDが全て数値データであって、「10A」等の様な文字列データのIDは存在していない事を前提とした方法です。  もし文字列データのIDも存在している場合には、作業列を2列使う方法で対応する方法もあります。  ですから、もし文字列データのIDも存在している場合には、その旨を御教え願います。

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

>下記のようなデータがあり、各IDの最大日付の行を抽出しようとしています このご説明が完全に正しい前提で。 手順: 新しいシートのA1セルを選ぶ(<必須) ご利用のエクセルのバージョンが不明のご相談ですが、最近のを使っているならデータタブの「統合」を開始する 元のリストが仮にA,B,C列に1行目(がタイトル行で)からあるとして 元のリストを選んで追加する 集計の方法を「最大値」に変え 上端行、左端列にチェック してOKする。

  • msMike
  • ベストアンサー率20% (364/1805)
回答No.2

「マクロ?VBA?」ですって? 「関数をどれを使えばいいかわかりません」と仰っている貴方が、失礼ながら、マクロもVBAもお分かりになるとは思えませんが、如何でしょうか? 添付図において、 G2: =SUMPRODUCT(MAX((B$2:B$8=F2)*(C$2:C$8)))

回答No.1

関数ではありませんが、ピボットテーブルで集計して最大値を出す方法ではいかがでしょうか? 氏名、IDを行ラベルに、日付を値フィールドに入れて、値フィールドの設定を「最大値」にすれば、 同じ氏名、IDで最大値の日付が表示できます。

関連するQ&A

専門家に質問してみよう