![]() |
||
<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
このふたつを、&でつなげます。間に"時間"とか"分"っていう文字列も&でつなげてやれば・・・。
こんな風になります。
このクエリをそのまま開いてもよいかもしれないですが、もうちょっと手をかけて、こんな感じのフォームを作ってみてはどうでしょう?
何月のデータを集計したいのか、をコンボボックスで指定して、絞り込めるように工夫してみました。
これはほんの一例で、いろいろ工夫できると思いますよ。
![]() |