いつもお世話になっております。
数式項目の作成でご相談です。
今日が今月の何週目かを数式で表したく(1週目なら1、2週目なら2)、
かつ、週の始まりの起点日を月曜日としたいのですがうまくいきません。
例えば今月4/10(月)は3、4/23(日)は4としたいです。
「(day( TODAY())+6)/7」という数式を作ってみたのですが、起点日が流動的になってしまうようで、使えなさそうです。
ご教授いただけましたら幸いです。
Saitoさんの考え方を引用して、
CEILING( (
DAY( TODAY() ) +
MOD( WEEKDAY( TODAY() - DAY( TODAY() ) + 1 ) + ( 7 - {基準となる曜日のWEEKDAY値} ) , 7 )
) / 7 )
という関数化ができそうです。
今回は月曜日を基準とするので、{基準となる曜日のWEEKDAY値}=2として、
CEILING( (
DAY( TODAY() ) +
MOD( WEEKDAY( TODAY() - DAY( TODAY() ) + 1 ) + 5 , 7 )
) / 7 )
のような形になります。
<解説>
月の中で週の数を考える時は、「( 現在日 + 月初日の曜日と月初日以前の基準となる曜日の差 ) / 7 の切り上げ」になる。
ここで、「月初日の曜日と月初日以前の基準となる曜日の差」は、
IF( WEEKDAY( 月初日 ) - {基準となる曜日のWEEKDAY値} >= 0 ,
WEEKDAY( 月初日 ) - {基準となる曜日のWEEKDAY値} ,
WEEKDAY( 月初日 ) - {基準となる曜日のWEEKDAY値} + 7
)
として決定できる。
条件分岐については、
IF( x >= 0 , x , x + y ) = MOD( x + y , y ) { x < y , y > 0 }
となるため、上記の条件分岐を
MOD( WEEKDAY( 月初日 ) - {基準となる曜日のWEEKDAY値} + 7 , 7 )
と書き換えることができる。
これを用いて、「( 現在日 + 月初日の曜日と月初日以前の基準となる曜日の差 ) / 7 の切り上げ」は
CEILING( (
現在日 + MOD( WEEKDAY( 月初日 ) + ( 7 - {基準となる曜日のWEEKDAY値} ) , 7 )
) / 7 )
となる。