今日の日付から月初/月末日を算出する。(締日判定)

前ページのサンプルでは当月の月初/月末でしたが、今度は「締日」を設定して月度単位の月初/月末日を算出します。 ※「締日」は2831日は全て末締め扱いとしています。
今度は「月末日」を先に算出します。

月初/月末日の算出②
(画像をクリックすると、このページのサンプルがダウンロードできます)
見にくいので数式を整理します。

 =IF($D$2>=28
    ,EOMONTH($B$2,0)
    ,IF(DAY($B$2)<=$D$2
       ,DATE(YEAR($B$2),MONTH($B$2),$D$2)
       ,DATE(YEAR($B$2),MONTH($B$2)+1,$D$2)
       )
    )
まず、「締日」が28日~31日は末締め扱いなので、この場合は単に当月末日です。(先頭の「IF関数」の肯定側)
「締日」が28日より前の場合は、先頭の「IF関数」の否定側で、別の「IF関数」を用意し、「指定日」の「日」が「締日」を過ぎていないか判定します。
過ぎていない場合は、「DATE関数」で「指定日」の年・月に「締日」を「日」として日付を生成し、
過ぎている場合は、同じく「DATE関数」で「指定日」の翌月の年・月に「締日」を「日」として日付を生成します。



関数概略説明
 IF関数  比較判断を行ない、肯定時と否定時に分けます。引数は以下の通りです。
 ① 比較判断式
 ② 肯定時の値(または処置式)
 ③ 否定時の値(または処置式)
 EOMONTH関数  開始日から起算して、指定された月数だけ前または後の月の最終日に対応するシリアル値を返します。
 引数は以下の通りです。
 ① 開始日
 ② 月数(前の月を指定する時はマイナス値)
 DATE関数  3つの独立した値を受け取り、それらを組み合わせて日付を作成します。
 引数は以下の通りです。
 ① 年
 ② 月
 ③ 日
 YEAR関数  日付に対応する年を返します。 引数は日付(シリアル値)です。
 MONTH関数  日付に対応する月を返します。 引数は日付(シリアル値)です。
 DAY関数  日付に対応する日を返します。 引数は日付(シリアル値)です。

次に「月初日」を算出します。

月初/月末日の算出②

こちらの数式は簡単ですが、一応整理します。

 =IF($D$2>=28
    ,EOMONTH($B$2,-1)+1
    ,EDATE($F$3,-1)+1
    )
先頭の「IF関数」で「締日」を判断するのは「月末日」と同じで、28日~31日は末締め扱いなので、 前ページと同様「EOMONTH関数」で「前月月末日+1」を算出するだけです。
「締日」が28日より前の場合は、先に算出されている「月末日」から「EDATE関数」を使って「1ヶ月前の日付」を算出して「+1」させています。



関数概略説明
 EDATE関数  開始日から起算して、指定された月数だけ前または後の日付に対応するシリアル値を返します。
 引数は以下の通りです。
 ① 開始日
 ② 月数(前の月を指定する時はマイナス値)