Accessで次のようなテーブルがあったとします。(テーブル名:tabletime)
開始時刻 | 終了時刻 |
---|---|
8:45:00 | 9:00:00 |
9:00:00 | 12:00:00 |
9:30:00 | 11:20:00 |
ここで次のような問題を考えます。
開始時刻から終了時刻までの経過時間を求めよ。ただし1時間単位とし1時間未満の端数は切り上げる。
Accessの場合、時刻から時刻を引くだけで経過した時間がが求められます。これはExcelと同様にシリアル値になります。
1日が「1」に相当し、12時間が「0.5」に相当します。
逆にシリアル値に24をかければ何時間かが分かります。
つまり
経過時間=(終了時刻-開始時刻)×24
となります。
次に端数の切り上げを考えます。
ExcelにはRoundupというワークシート関数がありますが、Accessにはありません。
使えそうな関数は、Intという関数です。これは与えた数値と同じもしくは小さな整数を返しますので切り捨てと同じような働きをします。
Int(8.5)=8
Int(-8.5)=-9
となります。
切り上げの場合は切り捨てて1を足せばよさそうですが、端数がない場合も切り上がってしまうのでダメです。
次のように、一度、マイナスにしてから、切り捨てて、またプラスに戻します。
元の数 | マイナス | Int | プラス |
---|---|---|---|
8.5 | -8.5 | -9 | 9 |
8 | -8 | -8 | 8 |
まとめると次のようになります。
-(Int(-([終了時刻]-[開始時刻])*24))
Accessではクエリを使いますが、具体的には次のようにします。(Access2007)
- メニューの作成-その他-クエリデザインを選択。
- 「テーブルの表示」ダイアログで該当のテーブルを選択し追加をクリック。閉じるをクリック。
- 開始時刻と終了時刻をダブルクリック。下の表(クエリデザイングリッド)に追加される。
- 下の表の終了時刻の右のフィールドに「経過時間: -Int(-([終了時刻]-[開始時刻]))」と入力。
- デザイン-結果-実行を選択。
SQLならば次の通りです。
コメント