VBAで日付を便利に扱う方法!MAX関数で最新日を取得しよう

エクセルのワークシートに日付を入力して表を作成することってありますよね。

例えば、誕生日リストや入会日リストなど。

誕生日リストで、一番若い人は誰だろうと探す場合、どうしますか?

リスト数によっては、日付を見て探すのは一苦労ですよね。

こんなときに活躍するのがMAX関数です。

そこで本記事では、「MAX関数やMIN関数を使って日付を便利に扱う方法」について解説します。

1.エクセルで扱う日付の正体

こんにちは。エクセルマン・ブリーダーのしもむぎ(@re_znd13)です。

まずはエクセルが日付をどう扱っているか、その正体を知っておきましょう。

ズバリ、エクセルは日付を数値として扱っています。

1900年1月1日を1として、1900年1月2日は2、1900年1月3日は3・・・というように数値と日付が紐付けられているんですね。

これをシリアル値といいます。

例えば、この記事を書いている2020年7月9日は44021というシリアル値が、その正体です。

過去であればあるほどシリアル値は小さく、未来であればあるほどシリアル値は大きいということですね。

2.ワークシート上で使えるMAX関数、MIN関数

日付の正体は数値(シリアル値)ということがわかりました。

そうすると、ここからの話はわかりやすいのではないでしょうか。

いくつかのセルの中に日付が入っているとして、その中から最新の日付を選ぶには、シリアル値が最大のものを選べばよい、ということです。

逆に最古の日付を選ぶには、シリアル値が最小のものを選べばよい、ということですね。

こんなときに使えるのが、MAX関数やMIN関数です。

この関数はワークシート上で使える関数です。

A1セルからA6セルまで日付が入っているとして、これらの関数の使い方を見ていきましょう。

MAX関数とMIN関数の使い方(構文)は以下です。

範囲を指定すると、その中から最大値や最小値を探すことができます。

MAX(A1:A6)
MIN(A1:A6)

実行結果を見てみます。

C1セルにMAX関数、C2セルにMIN関数を入力しました。

C1セルに最新の日付、C2セルに最古の日付が返されているのがわかりますね。

3.VBAでもMAX関数、MIN関数を使いたい!

エクセルのマクロでこのMAX関数、MIN関数を使いたい!というケースもあると思います。

この章ではVBAコードの例を見ていきますね。

以下のVBAコードはMAX関数を使って最新日を取得するケースです。

実行結果は画像の通り。

MAX関数はワークシート関数なので、記述に少し工夫が必要です。

Sub 最新日()
Dim latestDATE As Date

latestDATE = Application.WorksheetFunction.Max(Range("A1:A6"))

MsgBox latestDATE

End Sub

次にMIN関数で最古日を取得する例です。

MAX関数と同様に記述していきます。

結果は画像の通り。

Sub 最古日()
Dim oldestDATE As Date

oldestDATE = Application.WorksheetFunction.Min(Range("A1:A6"))

MsgBox oldestDATE

End Sub

4.まとめ

本記事では、「MAX関数やMIN関数を使って日付を便利に扱う方法」について解説しましたが、いかがでしたか?

エクセルが日付をシリアル値として扱っていることを知れば、日付の扱いもしやすいのではないでしょうか。

今回はMAX、MIN関数を使いましたが、LARGE関数やSMALL関数も使えるので、うまく使っていきましょうね。