ポイント
基本
残日数は今日と期限の差であらわすことができる
(本当は期限に日付が入っていない場合のエラー処理をやります)
経過日数は開始日と今日の日付で計算させます
(開始日なんて誰も入れないので、本当はこれもエラー処理が必要です)
関数
今日の日付を取得するのはDate()
日数の差を計算するのはDateDiff
datediff("d",[開始日時],date())
フィールド名で指定する
"d"が日数
DateDiff("d",[A],[B])
[B]-[A]
日付に何も設定していない場合 #1/1/4501#
西暦4051年1月1日
になっている。
Accessのクエリのようにフィールド名で指定する
(というか実際DASLというSQLの一種を使っている)
次のフィールドを定義する
今回は経過日数と残日数を定義する
それ以外に付け加えられるもの
手動で更新する必要があるが、たとえば講義で全10回の第1回というような場合のため
[全]と[回]
というフィールドを設定してもよい
ユーザー定義フィールドはソートできない
この定義はVBAではできないっぽい
オブジェクトが捕まらない
厳密にいうと…
経過日数を示すのは難しい
経過日数を示すには
計算を開始する日 現在の日 期限
が必要で新たに計算を開始する日を設定する
手順
1.列を作成
設定の方法
タスク(仕事)を表示させる
[表示]タブ
ビューの設定
列(C)
[内容]タブ
新しい列をクリック
タイトルを入れる
数式を選択
これでOKして、フィールドに表示させ、レイアウトを調整する。
出来上がったらビューの設定から現在のビューを保存する。
2.作成するユーザー定義フィールドと設定の内容
フィールド名
経過日数
式
IIf([開始日]<>#1/1/4501#,DateDiff("d",[開始日],Date()))
フィールド名
残日数
式
IIf([期限]<>#1/1/4501# Or Date()>=[期限],DateDiff("d",date(),[期限])
3.入力
タスクを設定してリストのように表示します。
Outlook的にはTableViewになるようです。
ユーザー定義フィールドはタスクを開いてインスペクター表示しても出てきません。
テーブル表示の画面で
「ゆっくり2回」
入力する欄の部分をクリックします。
するとなぜか入力できます。
厳密にいうと
開始日は将来の場合もある
タスクは開始日ではなく事前に登録することもあります。
すると
DateDiff("d",[開始日],Date())
この式はマイナスになります。
このように考えていくと計算を開始する日(個人的にこれを始計日と呼んでいます)が必要です。
期限の隠しフィールド、そして期限の考え方
期限については一つタスクでメール用の表示の中の期限切れ日時(Expire Date)を使う方法もあります。
また試験などでは試験当日を0にするのではなく試験の前の日が0です。
このように期限も前日か当日か場合によって違います。
しかしあまり難しいことを考えてもきりがない
なので、単純に表示させた方がいいと思います。