いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)COUNTIF(S)関数で日付・期間・年・月を指定してカウントする

 ExcelのCOUNTIF(S)関数を使って指定した日付、あるいは指定した期間に含まれる日付をカウントする方法についてです。
 応用として指定した年や月(年及び月)に含まれる日付をカウントする例についても紹介します。

特定の日付をカウントする

 まずは日付を式の内部で直接指定してカウントする例です。
 画像ではB3:B9セルの7つの日付のうち、2023年12月16日であるものをカウントしています。該当する日付は2つあるので結果は「2」となっています。

 D3セル

=COUNTIF(B3:B9,"2023/12/16")

 第2引数(条件)を「"2023/12/16"」としています。単に「2023/12/16」とすると「2023割る12割る16」という割り算(=10.536…)とみなされるのでうまくカウントできません。
 また、表示形式に関わらず同じ日付であればカウントされます。つまり「2023-12-16」とか「令和5年~」という形式で表示させている場合でも問題なくカウントできます。これは以降の例でも同様です。



 次の画像では7つの日付のうち、D3セルに入力されている日付と同じ日付をカウントしています。

 E3セル

=COUNTIF(B3:B9,D3)

 このようにセルに入力されている日付を条件にする場合は「" "」で囲む必要はありません。

特定の日以降・以前の日付をカウントする

 次の画像ではB3:B9セルの日付のうち2023年12月16日以降(当日含む)の日付をカウントしています。

 D3セル

=COUNTIF(B3:B9,">=2023/12/16")

 条件に比較演算子「>=」を使っています。これにより「右側の値以上(同じかより大きい)」という条件を表すことができます。
 よって「">=2023/12/16"」は「2023年12月16日以降」という条件になります。ここでも「" "」で囲むのを忘れてはいけません。
 「>=」の代わりに「<=」とすると「2023年12月16日以前」という条件になります。「>」とすると「2023年12月16日よりも後」、「<」とすると「2023年12月16日よりも前」という条件になります。



 次の画像ではD3セルに入力されている日付以降の日付をカウントしています。

 E3セル

=COUNTIF(B3:B9,">="&D3)

 ここがちょっとした難関です。
 比較演算子「>=」を「" "」の内部に、セル参照(D3)を「" "」の外に記し、これらを「&」でつないでいます。
 こうすることでこの条件は「">=2023/12/16"」と解釈され、上の例と同じ結果になります。
 「">=D3"」としてしまうと「D3」がセル参照とみなされないのでうまくカウントできません(結果は「0」となります)。

期間内(2つの日付の間)の日付をカウントする

 次の画像では、日付のうち2023年12月3日から同20日までの期間に含まれる日付をカウントしています。

 D3セル

=COUNTIFS(B3:B9,">=2023/12/3",B3:B9,"<=2023/12/20")

 「2023年12月3日以降」かつ「2023年12月20日以前」という2つの条件を満たす日付をカウントすればいいので、COUNTIFS関数を使っています。
 なお本記事では関数を使い分けていますが、うっかりCOUNTIF関数で条件を2つ記すとエラーになるのでCOUNTIFS関数に統一するのも手です。



 次の画像では、D3セルとE3セルの2つの日付の期間に含まれる日付をカウントしています。

 F3セル

=COUNTIFS(B3:B9,">="&D3,B3:B9,"<="&E3)

 ここでもセル参照を「" "」の内側に含めないのがポイントです。

特定の年の日付をカウントする

 次の画像では、日付のうち2023年の日付をカウントしています。

 D3セル

=COUNTIFS(B3:B9,">=2023/1/1",B3:B9,"<=2023/12/31")

 基本的には上記の「期間内の日付をカウントする例」と同じです。
 2023年は2023年1月1日から2023年12月31日までなので、その期間に含まれる日付をカウントすれば2023年の日付がカウントできます。



 次の画像では、D3セルに入力されている年の日付をカウントしています。

 E3セル

=COUNTIFS(B3:B9,">="&D3&"/1/1",B3:B9,"<="&D3&"/12/31")

 さらに複雑になりますが「">="&D3&"/1/1"」により「">=2023/1/1"」という条件を生成しています。同様に「"<="&D3&"/12/31"」は「"<=2023/12/31"」という条件になります。この2つの条件により2023年の日付をカウントできます。



 次の画像も内容は同じですが、条件の指定にDATE関数を使っています。

 E3セル

=COUNTIFS(B3:B9,">="&DATE(D3,1,1),B3:B9,"<="&DATE(D3,12,31))

 DATE関数は年,月,日の3つの値から日付を生成する関数です。よって「DATE(D3,1,1)」は「D3&"/1/1"」と、「DATE(D3,12,31)」は「D3&"12/31"」同じ意味になります。
 式は長くなるものの「&」による連結が減るのでこちらの方がやや見やすいかもしれません。

特定の月(年月)の日付をカウントする

 次の画像では、日付のうち2023年12月の日付をカウントしています。

 D3セル

=COUNTIFS(B3:B9,">=2023/12/1",B3:B9,"<=2023/12/31")

 これもやっていることは上記の「期間内の日付をカウントする例」と同じです。
 2023年12月は2023年12月1日から2023年12月31日までなので、その期間に含まれる日付をカウントすれば2023年12月の日付がカウントできます。



 ただし注意すべきは次の例です。
 ここではD3,E3セルに入力された年月に属する日付をカウントしています。

 F3セル

=COUNTIFS(B3:B9,">="&DATE(D3,E3,1),B3:B9,"<="&DATE(D3,E3+1,0))

 月の末日は31日だったり30日だったり28日だったりするので、2つ目の条件は「<=D3&"/"&E3&"/31"」のようには指定できません。
 そこでDATE関数を使い「"<="&DATE(D3,E3+1,0)」としています。「DATE(D3,E3+1,0)」は単純にみると「指定した年月の翌月の0日目」という意味ですが、結果的に当月末日の日付が生成されます。これで何年何月を指定しようとも正しい結果が得られます。