24時間以上の時間の計算をどうする?

こんにちは。伊川(@naonaoke)です。

ACCESSを操作していくと、どうしてもExcelの感覚から抜けられません。

一番、イラッとするのが時間の計算です。

Excelならば、24時間以上の計算も[h]:mmで書式の設定を行えば表示可能です。







問題提起

 

(株)IKAWAの阿久 世子男(アク セスオ)は上司から、下記の依頼を受けました。

24時間以上の計算をACCESSで行うにはどうしたらいいのか?

ACCESSで24時間以上の計算はできないなのだろうか?







解決策

回答
sesuo2.jpg
・24時間以上の時刻表示は文字としてフィールドに表示することは可能である。日付/時刻型としての表示はエラーとなる。どうしても24時間以上の計算が必要ならば、Excelへ転送する。








TimeSerial関数

TimeSerial関数は、指定した時、分、秒の数値から生成される時刻を返します。

60以上の分は次の時、0未満の分は前の時というように解釈されます。

ただし時として24以上あるいはマイナスの値を指定したときについてはエラーとなります。

24時間以上の場合は、別の方法を使います。

TimeSerial関数 作成手順その1 データベース確認


時間のフィールドには、秒で入力されています。

秒で表示されている数字をhh:nn:ssへ表示変更したいと思います。







TimeSerial関数 作成手順その2 クエリで表示させる

時間変換: TimeSerial(0,0,[時間])


上記の式で実行してみます。


初っ端からエラーとなりました。

TimeSerial の引数の型が Integer なので、最大 32767 までしか受け付けないのです。








TimeSerial関数 作成手順その3  TimeSerial関数以外で表示させる

時間再変換: CDate(Int([時間]/3600) & Format([時間]/3600/24,”:nn:ss”))

今度は、先頭にCdateをつけて、文字を無理矢理、日付/時刻型にしました。


やはり、24時間以上は表示ができません。







TimeSerial関数 作成手順その4 文字として、表示させる

時間再々変換: Int([時間]/3600) & Format([時間]/3600/24,”:nn:ss”)


時間は表示されましたが、この時間の表示は計算できません。

なぜならば、文字であり、日付/時刻型ではありません。

つまり、ACCESSは、24時間を越える計算は、数値して、加減乗除を行います。

その結果を、Format関数で文字として表すしかないのです。







ここがポイント

ここがポイント
Function8.png
会社のシステムが、なぜ、hh:nnssで表示されないのかと思っている人はいませんか?なぜか、24時間以上の時間を日付/時刻型として表示するのは、Excelだけの裏技のようです。この結果から、給料計算などは、ACCESS上で計算するなら、そのまま、データをACCESSへ転送して、

計算するほうが、はるかに速いと思います。

 








まとめ

今回のまとめ
sesuo6.jpg

24時間以上の計算は、ACCESSでガムシャラに計算するのもいいですが、Excelと連携することで、
計算は、簡単になります。

転送の方法までは記載していませんが、サンプルファイルには、組み込んでいます。

データがそのまま転送されてきますので、後は時間の計算をExcel上の行うだけです。

 

スポンサーリンク

Twitterでフォローしよう

おすすめの記事