Tips No.011 【簡単カレンダー改】

簡単カレンダー改

公開日:2016/06/15

今回も相変わらず、前回の更新から大分時間が経ってしまいました…ご無沙汰しております。

以前に「他のところ」で、「簡単カレンダー」と銘打って、たった3フィールドでカレンダーを作成するTipsを紹介した事があります。先日、自身の部屋にカレンダーが無い事にふと気づき、前述のTipを作成した経験を思い出したのですが、と同時に「そう言えば、月曜日から始まるカレンダーなんてものもあるなあ」などとも思っていました。
そして、そのように思っているうちに「週の開始曜日を可変できるカレンダーも ( 需要があるとは思えないけれども ) 面白いかもしれない!」と閃いたのですが、コレがいけなかった。
実現させるための論法を導き出すのに、丸々二日も費やしてしまいました、情けなや…。

今回はそのようなTipsを紹介するのですが、何故そんなに時間を要してしまったのかと言いますと、今回使用する計算フィールドの計算式の記述がどうにも「キレイ」にならず、他にスマートな計算方法があるのではないかと模索したためです。
結果として、私にはそれを見出す事ができませんでしたが、お時間のある方は、是非、よりスマートな方法を考案してみてください。

では、前置きが長くなりましたが、Tipsをご覧ください。
今回は、問題になった計算フィールド[Cd_年月日] ( 繰り返し数42 ) をメインに解説します。

まず最初に、仮に週の始めが日曜日の通常のカレンダーであるならば、フィールド[Cd_年月日] の計算式は、次のように記述すればOKです。

Date( Month( Extend( Gd_年月日 ) ) ; 1 ; Year( Extend( Gd_年月日 ) ) )
- DayOfWeek( Date( Month( Extend( Gd_年月日 ) ) ; 1 ; Year( Extend( Gd_年月日 ) ) ) )
+ Get( 計算式繰り返し位置番号 )

1行目 - 現在選択されている日付の月初の日付を取得
2行目 - DayOfWeek関数で、月初の日付が週の何番目の曜日であるかを計算し、その数値を引く
3行目 - 繰り返し位置番号を取得し、その数値を足す

次に、今回のように週の開始曜日を可変にするとなると、月初の曜日と選択した曜日とで「数字にしたら、どちらが大きいか」を比較する必要が出てくるのですが、まさにこの「比較」こそが、どうにも「キレイ」にならなかった箇所です ( そもそもこの着想自体が間違っているかもしれません ) 。

今回のフィールド[Cd_年月日] の計算式では、記述が冗長になってしまうのを避けるために「Let関数」を使用しています。でも、何も難しい事はありません。今回は、上記の計算式の赤色文字にしている「2行目」を書き換えているだけです。

■ Let関数で設定している変数
d = 現在選択されている日付の月初の日付
w = 月初の日付が週の何番目の曜日か
n = 選択中の曜日が週の何番目の曜日か

■ 上記の計算式の「2行目」にあたる部分
- 1 - ( GetAsNumber( w ) - GetAsNumber( n )
+ If( GetAsNumber( w ) >= GetAsNumber( n ) ; 0 ; 7 ) ) // この部分が「比較」の箇所

この計算式では、最初の「- 1」で、前月末の日付を取得しています。そして、更に数字を引くのですが、変数[w] から変数[n] を引いて差を出し、変数[w] が変数[n] 以上の数字の場合には「0」、それ以外の場合は「7」を足して、引くべき数字を調整しています。

例えば、2016年6月の場合、1日は「水曜日」ですので、変数[w] は「4」です。そして選択中の曜日が「月曜日」の時、変数[n] は「2」です。
この状態を、計算式に日付と数字を当ててみると、次のようになります。

2016/05/31 - ( 4 - 2 + 0 ) = 2016/05/29

また、2016年6月の場合で、選択中の曜日が「木曜日」の時、変数[n] は「5」です。
同様に、計算式に日付と数字を当ててみると、次のようになります。

2016/05/31 - ( 4 - 5 + 7 ) = 2016/05/25

このように算出した日付に、繰り返し位置番号を足すことで、週の開始曜日を可変できるカレンダーが完成します。

今回のTipsはお役に立ちましたか?
先月、FileMaker15がリリースされました。今回は「ぐはっ!」と声にはしませんでしたが、心なしかツールバーの縦幅が少し低くなったような…。高くなるよりは良いのですが、またヨケイナコトをしてくれるものです。次あたり、拡張子が変わったりして、ははは。

- ダウンロード -