日付を扱う場合は、「日付型(シリアル値)」への理解が大事です。
まず、データ上の「日付」がどういうものか理解して下さい。
セル上の「日付」は書式に左右されて、和暦表示だったり、西暦表示だったり、月日だけだったりしますが、「日付」として認識されているなら数式バーには日本語版
Excelなら「
2000/1/1」という形式で表示されるはずです。
しかし、「日付」というデータ型の実体はこのような視覚的に「年」「月」「日」が認識できるようなものではなく、「シリアル値」というものなのです。
この点の説明を
「年・月・日を指定し、その日付を取り出す」の先頭に用意しましたのでご覧下さい。
「日付から年・月・日をそれぞれ取り出す」で「日付」のデータ型の理解ができていれば、簡単です。
(画像をクリックすると、このサンプルがダウンロードできます)
「日付」のデータ型は1日を「1」でカウントする「シリアル値」ですから、前日は元の日付から「1」を差し引き、翌日は「1」を加算するだけで算出できます。
※
R1C1参照形式の場合は
となります。
締日などの算出で「前月同日」「翌月同日」の日付を算出するなどはよく発生することだと思います。
これらは以前のページの説明の応用でできることですね。
この式は先の
「年・月・日を指定し、その日付を取り出す」の応用で「月」の部分を加減させています。
「
2017/01/20」の前月だと、この方法では「
2017/00/20」というような計算になるのですが、
これは正しく「
2016/12/20」になるわけです。
※
R1C1参照形式の場合は
=DATE(YEAR(R2C2),MONTH(R2C2)-1,DAY(R2C2))
となります。
さて、
Excel2007以降
(*.xlsx、*.xlsm)では
EDATE関数が追加されました。
ここで行なっている計算式が、
このようにコンパクトな式で処理できることになります。
第
1引数が「起算日付」、第
2引数が「月数(マイナス可)」です。
※
R1C1参照形式の場合は
となります。
月末日の処置の場合は日が「
31」の月の場合は、
このようになるのですが、月末日で利用しようとすると、例えば「
2017/02/28」を指定すると前月、翌月も「
28」日になってしまいます。
このため月末日の処置の場合は「月初日から
1を差し引く」という処置(対応)は必要なようです。
逆に「従来方式」の方はというと、
このように翌月の方が「
2017/02/28」ではなく「
2017/03/03」になってしまいました。
これは式の上では「
2017/02/31」を指定しているための補正が影響したためです。
これは当サイトに質問を頂いた例です。質問は「指定日から6ヶ月後の日付の翌日」でした。
この画像のサンプルのように指定日が月末日時は6ヶ月後も月末日として翌日は「1日」としたいわけですが、
単純に先に6ヶ月後を算出する手続きだと算出日は「8月29日」になってしまいます。
ここでのやり方は先に「翌日」を算出してから「6ヶ月後」を算出するという方法を採れば良いことになります。
※
R1C1参照形式の場合は
となります。