Posted at

OUTLOOK タスク(仕事)で残日数、経過日数を表示させる

More than 1 year has passed since last update.


ポイント


基本

残日数は今日と期限の差であらわすことができる

(本当は期限に日付が入っていない場合のエラー処理をやります)

経過日数は開始日と今日の日付で計算させます

(開始日なんて誰も入れないので、本当はこれもエラー処理が必要です)


関数

今日の日付を取得するのは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です。

このように期限も前日か当日か場合によって違います。


しかしあまり難しいことを考えてもきりがない

なので、単純に表示させた方がいいと思います。