<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--作業時間の集計



「時間」の計算って、いろいろ難しいですよね。
1日は24時間だし、1時間は60分だし、1分は60秒だし・・・。

こればっかりは、残念ながら、ピッタリした関数とかってないんですよ。なので、ケースバイケースでいろいろ工夫していかないとナリマセン。

「開始時刻から終了時刻までの間が何時間何分だったか出したい」なんてとき、けっこう悩んじゃったりしませんか?
今日はそんな感じのを作ってみましょう。さくっと。

例えばー・・・まあ、おおまかなイメージですけども、みんなが毎日、なんかの仕事をするとします。
そうですねぇ・・・「傘貼り」でもするとしますか。
毎日、出社してきて、作業の開始時刻と、終了時刻と、自分の社員番号を入力していくとします。

このフォームだと、深夜勤務(日付をまたぐ場合)の配慮をしてないんですけど・・・。
ま、まあ、あんまりこだわりすぎるとお話が先に進まなくなっちゃうんで、まあ、とにかくこんな感じのフォームを使って、みんなが毎日作業記録を残していくとします。

で、このフォームから入力されたデータが、こんな感じのテーブルに残っていきます。

[開始時刻]と[終了時刻]は、ふつうの「日付時刻型フィールドです。
書式の設定で、時刻の部分までちゃんと表示されるようにしてます。

このテーブルから、「今月、キツネザルは何時間何分働いたのか」集計を出す努力をしてみましょう。


まず、基本となるクエリです。
社員番号ごとに集計したいと思ってるんで、[社員番号]と、[開始時刻][終了時刻]を選びます。

日付時刻型のフィールド同士の「引き算」は、DateDiff関数っていうやつを使います。
指定した値の「差」を求める関数です。いろいろ例が載ってると思いますんで、詳しいことはヘルプを見て確認してみてくださいね。

もし、「1か月分だけ出したい」なんて時は・・・。別のコーナーで、「今月のデータだけ出す工夫」っていうのを載せてますので、ぜひとも挑戦してみてください。

このクエリを開くと、[時間(分)]っていう名前のフィールドができて、開始時刻と終了時刻の「差」を、分単位で表示します。
640分、とか、そんな感じで。

なんか名前付けて保存しましょう。[クエリ1]でいいや。
名前付けて保存できたら、このクエリは閉じましょう。


で、このクエリを基にして、新しくクエリを作ります。

Σのツールボタンをクリックして、「集計クエリ」にします。

社員番号ごとに集計しようと思ってるんで、[社員番号]をグループ化し、[時間(分)]を合計します。
とりあえずこれで、データシートビューに切り替えてみると・・・。

わたしは、列名を[時間]って変えてみました。
9260分、ってな感じで、集計されますよね。

ただ集計するだけなら、これでもいいんですけど・・・。
○時間○分、って表示させたいとき、これが問題ですね。できないです。

がんばればできないことはないんですけどね。。。

○時間 の部分と、 ○分 の部分に分けて、&でつなげて作ったりしてみましょう。

○時間........[時間(分)]を60で割り、小数点以下をInt関数で切り捨てます。 例) Int([時間]/60)

○分............[時間(分)]を60で割ったときのあまりを、Mod演算子で出す。  例) [時間] Mod 60

このふたつを、&でつなげます。間に"時間"とか"分"っていう文字列も&でつなげてやれば・・・。

こんな風になります。


このクエリをそのまま開いてもよいかもしれないですが、もうちょっと手をかけて、こんな感じのフォームを作ってみてはどうでしょう?

何月のデータを集計したいのか、をコンボボックスで指定して、絞り込めるように工夫してみました。
これはほんの一例で、いろいろ工夫できると思いますよ。