いきなり答える備忘録

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

(Gスプレッドシート)COUNTIF(S)関数で日付・期間・曜日を指定する

 GoogleスプレッドシートのCOUNTIF関数やCOUNTIFS関数で特定の日付や、指定した期間・曜日に該当する日付をカウントする方法です。基本はどちらの関数でも変わらないので、主にCOUNTIF関数での例を紹介します。

  • COUNTIF(S)関数で条件に日付を指定するときは、条件とする日付を「" "」(ダブルクォーテーション)で囲みます。
  • 2つの日付の間に含まれる日付をカウントする場合はCOUNTIFS関数を用いるのが適当です。
  • YEAR関数などと併用すれば特定の年・月・曜日に属する日付をカウントできます。

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

 最も基本的な例です。
 画像ではD3セルに式を入力して、B列の日付のうち「2023/3/9」であるものをカウントしています。

 D3セル

=COUNTIF(B3:B11,"2023/3/9")

 条件として日付を指定する場合は、このように「" "」(ダブルクォーテーション)で囲みます。
 囲まないと「2023割る3割る9」という計算式(=74.925…)とみなされるのでどの日付にも該当せず、結果は「0」になってしまいます。
 なお、「2023-3-9」のように別の書式で記録された(見た目が異なる)日付であってもきちんとカウントされます。



 こちらではD3セルに入っている日付を参照して条件にしています。

 E3セル

=COUNTIF(B3:B11,D3)

 このように、セルに入っている日付を参照して条件にする場合は「" "」で囲まなくていいです。

特定の日付以降(以前)の日付をカウントする方法

 ここでは「2023/3/9以降(当日を含む)」の日付をカウントしています。

 D3セル

=COUNTIF(B3:B11,">=2023/3/9")

 このように比較演算子「>=」を「" "」の中に含めて記入します。
 比較演算子を「<=」にすれば「2023/3/9以前(当日含む)」、「>」にすれば「2023/3/9より後」、「<」にすれば「2023/3/9より前」という条件になります。



 こちらはD3セルに入っている日付以降の日付をカウントする例です。

 E3セル

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

 比較演算子「>=」は「" "」で囲みますが、セル番地の「D3」は囲みません。そして両者を「&」でつなぐ必要があります。

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

 ここでは「2023/3/9」から「2023/3/19」までの間に含まれる日付をカウントしています。

 D3セル

=COUNTIFS(B3:B11,">=2023/3/9",B3:B11,"<=2023/3/19")

 COUNTIFS関数を使って「2023/3/9以降」かつ「2023/3/19以前」という2つの条件を満たす値をカウントしています。
 後述するようにCOUNTIF関数の第1引数(範囲)で関数が使えるので、ISBETWEEN関数などと併用すればCOUNTIF関数でも済むのではないかと思われますが、(実際できるものの)日付の指定が複雑になるため非常にめんどくさい式になります。

特定の年・月・曜日の日付をカウントする方法

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

 D3セル

=COUNTIF(ARRAYFORMULA(YEAR(B3:B11)),2023)

 GoogleスプレッドシートのCOUNTIF関数の第1引数(COUNTIFSの場合は奇数番目の引数)では関数が使えるので、カウント対象の値を変換しておくことができます(Excelではできない)。
 そこでYEAR関数を使って日付を「年」の値に変換してカウントしています。一括変換するためARRAYFORMULAが必要になり、ちょっと長くなるのが痛いところです。
 COUNTIFSを使って2023/1/1~2023/12/31の日付をカウントしても同じですが、条件を1つの数値だけで指定できるのがメリットです。



 次の画像では3月の日付だけをカウントしています。

 D3セル

=COUNTIF(ARRAYFORMULA(MONTH(B3:B11)),3)

 MONTH関数で日付を「月」の値に変換してカウントしています。
 ただしこのやり方だと、何年の3月でも区別せずカウントされます。



 そこで、次の画像は「年月」でカウントする例です。

 D3セル

=COUNTIF(ARRAYFORMULA(TEXT(B3:B11,"yyyymm")),"202303")

 TEXT関数で日付を「yyyymm」形式の文字列に変換しておき、文字列で年月を指定しています。



 最後に曜日でカウントする例です。
 次の画像では日曜日の日付をカウントしています。

 D3セル

=COUNTIF(ARRAYFORMULA(TEXT(B3:B11,"ddd")),"日")

 TEXT関数で日付を1文字の曜日(日,月,火……)に変換し、条件を1文字で指定しています。