目次
24時間以上の時間の計算をどうする?
こんにちは。伊川(@naonaoke)です。
ACCESSを操作していくと、どうしてもExcelの感覚から抜けられません。
一番、イラッとするのが時間の計算です。
Excelならば、24時間以上の計算も[h]:mmで書式の設定を行えば表示可能です。
問題提起
(株)IKAWAの阿久 世子男(アク セスオ)は上司から、下記の依頼を受けました。
24時間以上の計算をACCESSで行うにはどうしたらいいのか?
ACCESSで24時間以上の計算はできないなのだろうか?
解決策
・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関数で文字として表すしかないのです。
ここがポイント
会社のシステムが、なぜ、hh:nnssで表示されないのかと思っている人はいませんか?なぜか、24時間以上の時間を日付/時刻型として表示するのは、Excelだけの裏技のようです。この結果から、給料計算などは、ACCESS上で計算するなら、そのまま、データをACCESSへ転送して、計算するほうが、はるかに速いと思います。
まとめ
24時間以上の計算は、ACCESSでガムシャラに計算するのもいいですが、Excelと連携することで、計算は、簡単になります。転送の方法までは記載していませんが、サンプルファイルには、組み込んでいます。
データがそのまま転送されてきますので、後は時間の計算をExcel上の行うだけです。