- 締切済み
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つの行を抽出したいですが、抽出方法がわかりません。 関数を使ってやろうとも思いましたが、関数をどれを使えばいいかわかりません。 別シートに抽出でも全く問題ありませんので、恐れ入りますが、抽出方法を教えてください。 よろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- MackyNo1
- ベストアンサー率53% (1521/2850)
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)
- Pcworks
- ベストアンサー率35% (64/179)
>各IDの最大日付の行を抽出しようとしていますが、抽出方法がわからず、困っています。 日付はシリアルナンバーといって基準日から一日づつ足されたものなのでExcelでは数値で扱われてます、最大日付を求めたいなら単純に日付を基準にソート(降順)すれば上から最新(日付の新しい順番、最大日付)の日付で並べ替えられます。 基本的なことを理解していれば作業は簡単です、並べ替えた上から2行のデータを取ればよいのであとはご自分で考えて下さい。
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答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)
- msMike
- ベストアンサー率20% (364/1805)
- re_na_chu
- ベストアンサー率57% (4/7)
関数ではありませんが、ピボットテーブルで集計して最大値を出す方法ではいかがでしょうか? 氏名、IDを行ラベルに、日付を値フィールドに入れて、値フィールドの設定を「最大値」にすれば、 同じ氏名、IDで最大値の日付が表示できます。