入力した日付が、月の第何週にあるかを表示したい

記事番号:040787

kintoneのアプリでは、計算式を使うことで、入力した日付が月の第何週にあるかを算出できます。
ここでは、計算式の設定例を紹介します。

準備

アプリの設定画面のフォームタブを開き、以下の6つのフィールドを配置します。

  • (1) 日付フィールド
  • (2) 計算フィールド
  • (3) 計算フィールド
  • (4) 文字列(1行)フィールド
  • (5) 計算フィールド
  • (6) 文字列(1行)フィールド

各フィールドの設定

配置した各フィールドの設定画面を開き、フィールド名、フィールドコード、計算式を設定します。
フィールドコードとは

各フィールドを以下のように設定して、(1)のフィールドに入力した日付が、月の第何週にあるかを(6)のフィールドに表示されるようにします。
なお、(2)~(5)のフィールドは、途中計算のために使用します。

(1) 日付フィールド

このフィールドは、月の第何週にあるかを算出したい日付を入力するために使用します。

  • フィールド名:日付
  • フィールドコード:日付

このフィールドでは、計算式は設定しません。

(2) 計算フィールド

このフィールドでは、(1)で入力された日付の日にちのみ(その月に入ってから経過した日数)を算出します。

  • フィールド名:日部分

  • フィールドコード:日部分

  • 計算式:以下の計算式を設定します。

    コピーされました
    DATE_FORMAT(日付, "d", "Asia/Tokyo")

(3) 計算フィールド

このフィールドでは、(1)で入力された日付をもとに、その月の初日をUNIX時刻の形式(数値)で算出します。

  • フィールド名:月初日

  • フィールドコード:月初日

  • 計算式:以下の計算式を設定します。

    コピーされました
    日付-((日部分-1)*60*60*24)

(4) 文字列(1行)フィールド

このフィールドでは、(3)で算出した月の初日をもとに、月初の曜日を算出します。

  • フィールド名:月初曜日

  • フィールドコード:月初曜日

  • 計算式:「自動計算する」にチェックをつけ、以下の計算式を設定します。

    コピーされました
    IF( ( ( (月初日 / 60 / 60 / 24) - 0) / 7 ) - ROUNDUP(( ( (月初日 / 60 / 60 / 24) - 0) / 7 ) , 0) = 0 , "木曜",
        IF( ( ( (月初日 / 60 / 60 / 24) - 1) / 7 ) - ROUNDUP(( ( (月初日 / 60 / 60 / 24) - 1) / 7 ) , 0) = 0 , "金曜",
          IF( ( ( (月初日 / 60 / 60 / 24) - 2) / 7 ) - ROUNDUP(( ( (月初日 / 60 / 60 / 24) - 2) / 7 ) , 0) = 0 , "土曜",
            IF( ( ( (月初日 / 60 / 60 / 24) - 3) / 7 ) - ROUNDUP(( ( (月初日 / 60 / 60 / 24) - 3) / 7 ) , 0) = 0 , "日曜",
              IF( ( ( (月初日 / 60 / 60 / 24) - 4) / 7 ) - ROUNDUP(( ( (月初日 / 60 / 60 / 24) - 4) / 7 ) , 0) = 0 , "月曜",
                IF( ( ( (月初日 / 60 / 60 / 24) - 5) / 7 ) - ROUNDUP(( ( (月初日 / 60 / 60 / 24) - 5) / 7 ) , 0) = 0 , "火曜",
                  IF( ( ( (月初日 / 60 / 60 / 24) - 6) / 7 ) - ROUNDUP(( ( (月初日 / 60 / 60 / 24) - 6) / 7 ) , 0) = 0 , "水曜","該当なし"
                  )
                )
              )
            )
          )
        )
      )

(5) 計算フィールド

このフィールドでは、(4)で算出した月初の曜日をもとに、(2)で算出した日にちが月の第何週にあるかを算出します。

  • フィールド名:週数

  • フィールドコード:週数

  • 計算式:以下の計算式を設定します。この計算式では、例として、1週間の始まりを日曜としています。

    コピーされました
    IF(月初曜日="日曜", IF(日部分<=7, 1, IF(ROUNDUP((日部分-7)/7)-ROUNDDOWN((日部分-7)/7)=0, ROUNDDOWN((日部分-7)/7)+1, ROUNDDOWN((日部分-7)/7)+2)),
         IF(月初曜日="月曜", IF(日部分<=6, 1, IF(ROUNDUP((日部分-6)/7)-ROUNDDOWN((日部分-6)/7)=0, ROUNDDOWN((日部分-6)/7)+1, ROUNDDOWN((日部分-6)/7)+2)),
           IF(月初曜日="火曜", IF(日部分<=5, 1, IF(ROUNDUP((日部分-5)/7)-ROUNDDOWN((日部分-5)/7)=0, ROUNDDOWN((日部分-5)/7)+1, ROUNDDOWN((日部分-5)/7)+2)),
             IF(月初曜日="水曜", IF(日部分<=4, 1, IF(ROUNDUP((日部分-4)/7)-ROUNDDOWN((日部分-4)/7)=0, ROUNDDOWN((日部分-4)/7)+1, ROUNDDOWN((日部分-4)/7)+2)),
               IF(月初曜日="木曜", IF(日部分<=3, 1, IF(ROUNDUP((日部分-3)/7)-ROUNDDOWN((日部分-3)/7)=0, ROUNDDOWN((日部分-3)/7)+1, ROUNDDOWN((日部分-3)/7)+2)),
                 IF(月初曜日="金曜", IF(日部分<=2, 1, IF(ROUNDUP((日部分-2)/7)-ROUNDDOWN((日部分-2)/7)=0, ROUNDDOWN((日部分-2)/7)+1, ROUNDDOWN((日部分-2)/7)+2)),
                   IF(月初曜日="土曜", IF(日部分<=1, 1, IF(ROUNDUP((日部分-1)/7)-ROUNDDOWN((日部分-1)/7)=0, ROUNDDOWN((日部分-1)/7)+1, ROUNDDOWN((日部分-1)/7)+2)), "該当なし"
                   )
                 )
               )
             )
           )
         )
       )

    1週間の始まりを月曜としたい場合は、計算式の「月初曜日="日曜"」を「月初曜日="月曜"」に変更します。この計算式内のほかの曜日も、同様に、1日ずつずらした曜日に変更してください。
    計算式について詳しく知りたい場合は、「(5)の計算式の解説」を参照してください。

(6) 文字列(1行)フィールド

このフィールドでは、(5)で算出した週数をもとに、(1)で入力された日付が月の第何週にあるかを「何年何月の第何週」という形式で表示します。

  • フィールド名:第何週

  • フィールドコード:第何週

  • 計算式:「自動計算する」にチェックをつけ、以下の計算式を設定します。

    コピーされました
    DATE_FORMAT(日付, "YYYY年MM月の", "Asia/Tokyo")&"第"&週数&"週"

(5)の計算式の解説

(5)のフィールドでは、(4)で算出した月初の曜日をもとに、(2)で算出した日にちが月の第何週にあるかを算出します。

この計算式では、IF関数を使用しているため、条件によって、その後の流れが分岐します。

分岐1:日にちが第1週の日数を超えるか

月初の曜日に応じて、第1週の日数が決まります。
(5)の計算式では、例として1週間の始まりを日曜としています。

  • 例:1週間の始まりを日曜とした場合
    • 月初の曜日が「月曜日」の場合、第1週には6日間ある。
    • 月初の曜日が「火曜日」の場合、第1週には5日間ある。

この第1週の日数を、(2)で算出した日にちが超えているかどうかで、日にちが第1週にあるか、第2週以降にあるかが判定されます。

  • 日にちが第1週の日数を超えない場合
    日にちが第1週にあると判定されます。
    (5)のフィールドには、第1週の「1」が表示されます。
  • 日にちが第1週の日数を超えている場合
    日にちが第2週以降にあると判定されます。
    この場合、続いて、日にちが第2週以降のどの週にあるかを算出します。

分岐2:日にちが第2週以降にある場合にどの週にあるか

日にちが第1週の日数を超えている場合、第2週以降のどの週にあるかを算出します。

(2)で算出した日にちから第1週の日数を引いて、第1週の最終日から経過した日数を算出します。
この日数を1週間の日数である「7」で割ります。

余りが出ずに割り切れた場合

商に第1週分の「1(週)」を加えた数が、日にちがある週になります。
(5)のフィールドには、商に1を加えた数が表示されます。

例:月初日が「月曜」で、入力した日にちが「13日」の場合
月初日が「月曜」の場合、第1週には6日間あります。
日にちの「13」から第1週の日数「6(日)」を引いて、第1週の最終日から経過した日数が「7(日)」と算出されます。
この「7(日)」を「7(日/週)」で割ると、計算結果は「1(週)と余り0(日)」となります。
商の「1(週)」に、第1週分の「1(週)」を足して、日にちが第2週にあると算出されます。

余りが出て割り切れなかった場合

商に余りの日がある週分と第1週分の「2(週)」を加えた数が、日にちがある週になります。
(5)のフィールドには、商に2を加えた数が表示されます。

例:月初日が「月曜」で、入力した日にちが「15日」の場合
月初日が「月曜」の場合、第1週には6日間あります。
日にちの「15」から第1週の日数「6(日)」を引いて、第1週の最終日から経過した日数が「9(日)」と算出されます。
この「9(日)」を「7(日/週)」で割ると、計算結果は「1(週)と余り2(日)」となります。
商の「1(週)」に、余りの日がある週分と第1週分の「2(週)」を足して、日にちが第3週にあると算出されます。

参考:グラフ機能での活用例

レコードを「何年何月の何週」ごとに集計したい場合は、グラフの設定で「分類する項目」に、上記で設定した(6)の月の第何週かを算出するフィールドを指定します。

  • グラフの設定例 スクリーンショット:集計設定画面

  • 集計結果の確認例 スクリーンショット:集計結果の確認画面

また、日付フィールドがあれば、グラフ機能を使って、レコードを年の第何週ごとに集計できます。
グラフの設定で「分類する項目」に、日付フィールドを「週単位」で指定してください。
たとえば、日付フィールドの値が「2022年3月30日」の場合、2022年の13週にあるため、レコードは「2022 13」に集計されます。

参考:アプリテンプレート

このページで紹介したフィールドの設定と、「何年何月の第何週」で集計できるグラフの設定が含まれたアプリのテンプレートを、以下からダウンロードできます。

アプリテンプレート:what_week.zip

リンクをクリックしてテンプレートファイル(zip)をダウンロードしたあと、解凍せずにkintoneで読み込んでください。