いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Excel)期間中の月末日を全て求める

 Excelで、期間の初日と末日を指定したときに、その期間に含まれる月の末日を全て求める方法についてです。

  • SEQUENE関数やFILTER関数を利用して、期間中の月の末日をすべて列挙することができます。

手順

f:id:accs2014:20210405233339p:plain:right:w650

 B3セルとC3セルにそれぞれ期間の初日と末日が記録されています。
 これに対しE3セルに次のような式を入力することで、期間に含まれる月の末日を全て求めています。
 ただし日付は数値(シリアル値)となっています。

 E3セル

=LET(期間,SEQUENCE(C3-B3+1,1,B3),FILTER(期間,期間=EOMONTH(期間,0)))

 「SEQUENCE(C3-B3+1,1,B3)」の部分で期間の初日から末日までのすべての日付(シリアル値)を生成しています。
 そしてLET関数を使ってこの部分に「期間」という名前を付けています。
 さらにFILTER関数を使い、「期間」中のすべての日付の中から、その日が属する月の末日と一致する日付を抽出しています。結果的に月の末日である日付だけが抽出されます。
 

f:id:accs2014:20210405233345p:plain:right:w650

 ここでは式を少し変えることで横並びにしています。
 さらにセルの書式を変更して(関数によるものではない)日付形式で表示しています

 E3セル

=LET(期間,SEQUENCE(1,C3-B3+1,B3),FILTER(期間,期間=EOMONTH(期間,0)))

 SEQUENCE関数の第1引数(行数)と第2引数(列数)を入れ替えて「SEQUENCE(1,C3-B3+1,B3)」としただけで、あとは上記の式と同じです。
 

 次の画像では5組の期間を設け、E3セルの式を下方にコピーしています。
 年をまたぐようなケースでも問題ないことが確認できます。

f:id:accs2014:20210405233350p:plain:w700