エクセルで一覧情報を管理する中でよくあるケースの1つに、
ある項目を条件に、日付が最新(または一番古い)の行を抽出したい
というのがあります。
例えば以下の左側のエクセル一覧から名前毎に最新参加日を抜き出し、右側のエクセル一データのみを抽出するようなイメージです。
これ、一見するとエクセル関数を使わずにフィルターで絞り込めそうなのですが、実際はそう簡単には行きません。
そこでこの記事では、エクセルを用いて最新の日付のデータを抽出する方法をまとめました。
重複を除去して最新だけ残すというのが難しいポイントですが、覚えておくと広く応用が利きます。
重複データ削除だけでは難しい最新日付データの抽出例
エクセルの便利な機能に、重複の削除という機能があります。
対象のエクセルデータを範囲選択した状態でリボンの「データ」→「重複の削除」を行うことで、あっという間に範囲内の重複した行データを削除することができます。
この機能はボタン一つで重複を取り除くことが出来る便利な機能ではありますが、この「重複の削除」機能では次のようなことを行うことはできません。
- 複数の項目(複数の列)を条件に重複するデータを削除したい
- ただし、重複する項目の中で日付が一番新しいものは残したい
例えば、あるイベントに参加した人の名前・住所・参加日を、次のようなエクセルの一覧で管理しているとします。
運用としては、新しいもの(新しく参加した情報)をリストの一番下にどんどん追加していくような形です。
住所は変わる可能性があるので、名前と住所をセットで入力していきます。参加日が最新のものが下側に溜まっていくようなイメージです。
このデータを用いて参加者にお礼状を出すために参加者毎に参加日が一番新しい住所の情報を取りたいとなった場合、どうすればよいでしょうか?
このような結果をとりたいとします。
エクセル一覧の中身は名前・住所・参加日毎に重複がない状態であるため、先述の「重複の削除」機能では重複データを消すことが出来ません。また、参加日で絞り込もうにも、人によって最新の参加日が異なるため、単純にフィルターをかけることもできません。
そんな時は、次に紹介する方法を用いて、日付が最新の値のみを表示させることができます。
エクセルで最新の日付のデータを抽出する際の考え方
まず、エクセルを使用して最新の日付のデータを抽出する際の考え方を整理します。
欲しい情報は、日付が最新の値となっているデータのみです。
次のようなエクセルデータから参加日が一番最新のデータを抽出したいような場合、人(名前)によって最新の参加日が変わる、というのが難しいポイントです。
ですが、もっとシンプルに考えていくと、名前を条件にして日付を並び替えができれば、意図する最新日付だけ残してデータを抽出できそうです。
- 最新の日付順にデータを並び替える
- 名前を条件に、名前毎に何件データ数があるか連番を振る
- 連番=1となっているものだけで絞り込む
- 最新の日付データを抽出した一覧で表示できる。
ポイントは、名前を条件にして行数のカウントを取る、という点です。
ここさえできれば、最新の日付のデータを抽出することができます。
重複を除去し最新日付データだけ残して抽出する手順
エクセルを使って最新の日付のデータを抽出するにあたり、次の名前・住所・参加日の一覧を例に解説していきます。
定期的に開催されるイベントに参加した人をこのエクセル表に記録していくよう名イメージです。(「イベント名」という列を入れ忘れましたが、頭の中で補完してください)
最新の値を表示するために日付でデータを並び替え
上記のエクセルサンプルでは、上から順に入力していくようなイメージなので、日付が新しいものは下にどんどん溜まっていくような形になっています。
そのため、まずは日付が最新の順にデータを並び替えます。
エクセルの一覧部分を範囲選択した状態で、メニュ(リボン)から「データ」→「並び替え」をクリックします。すると並び替えダイアログが表示されますので、次のように設定してOKをクリックします。
- 名前:昇順
- 参加日:降順
名前毎に日付が最新の値を表示させたいため、最優先されるキーに「名前」、次に優先されるキーに「日付」を設定します。
エクセルの一覧並び替え後のデータは次のようになります。
枠で囲った部分が、名前(人)毎の日付が一番最新となっているデータです。
※同じ名前・日付で重複するデータ行があるような場合、どちらを抽出されても問題ないものとします。
vlookupではなくcountifで名前毎の件数を割り振り
次に、名前をキーにして一覧上に何件あるかの件数をカウントしていきます。ここでは、住所は参加日によって変わるためキーとして入れません。
この際に使用するのが、VLOOKUP関数ではなくCOUNTIF関数です。
COUNTIF関数は、指定された範囲に含まれるセルの中に検索条件に一致するセルが個数あるかを取得できる関数です。
D列に「件数」列を追加後、次のようにCOUNTIF関数を設定します。
D2セルには、次の数式を設定しています。
=COUNTIF($A$2:A2, A2)
上記の数式では、A2セル~A2セルまでの範囲内に、A2セルの値(Aさん)が何件含まれるかをカウントしています。A2セル~A2セルなので、件数としては1が返されます。
D2セルをコピーし、D3~D13セルにコピーをしていきます。
ちなみにD13セルの数式は
=COUNTIF($A$2:A13, A13)
※A2~A13セルまでの範囲内に、A13セルの値(Cさん)が何件含まれるかをカウントする、という意味
のようになっており、D13セルには3が表示されています。
これで名前毎に日付が最新のものから連番を振ることができました。
COUNTIF関数を設定して条件(ここでは名前)毎に連番を振る際のポイントは第一引数の範囲選択部分($A$2)を絶対参照で定義することです。
絶対参照でセル位置を定義することで、D2セルをコピペしても位置がずれないようになります。
詳しくは絶対参照(ドルマークありのセル指定)についての記事にて解説しています。
フィルタをかけて重複除去&最新の日付のデータを抽出
最後に、D列の値が1となっているものでエクセルのフィルタをかけます。
フィルタをかけた後は次のようになり、名前の重複が除去されて最新日付だけが残って抽出された結果となります。
名前によって最新の参加日はバラバラですが、うまく最新の値を表示できていることが分かるかと思います。
まとめ
エクセルを用いて最新の日付のデータを抽出する方法を、サンプルを交えてご紹介しました。
ポイントはCOUNTIF関数を使って、条件ごとに連番を振るという点です。
こうすることで重複データを除去して最新だけ残すことができるようになります。
今回の例は「名前」を条件に日付が最新のデータを抽出しましたが、条件を変えれば他にも応用が利くのではないかと思います。
VLOOKUP関数を使ってもできそうに思いますが、今回ご紹介したCOUNTIF関数もぜひ覚えておきましょう。
また、この記事に書いたようなちょっとした困ったことでも、自分に経験や知識が足りないために対応できなかったり、時間をかけたわりに全然進まなかったりと、思うようにいかない事ってありますよね。そんなときは専門家に相談したり解決してもらったりする方法もありますので、一人で悩まず対処してみましょう。