FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

↑やる気アップにご協力をお願いします。わぁいヽ(∇⌒ヽ)(ノ⌒∇)ノわぁい♪

こんな記事もありますよ


24時間を超える時間の計算をしたい

あ~…前回のブログ更新からから
1年近く放置しっぱなしです。
もうダメダメですな…。 orz

ご無沙汰しています。永遠のセミグラマーGenzoです。
(いや…だれも見てませんけどね…)

\(^_\)ソレハ(/_^)/コッチニオイトイテ

今回久しぶりに更新するその内容ですが、タイトルにもある通りの
「時間の計算をしたい!」です。

時間の計算をしたい…といっても、
何時間 + 何時間 というような計算をしたいわけです。

わかりやすい例えでいくと、総労働時間を計算したい…みたいなことです。

実は、Accessで時間としてデータを扱う時は、23:59:59までしか扱えないです。
(自分が知る範囲では…(^^ゞ)
24時を超えてしまうと、日付が変わったとして認識されてしまい
0:00:00からの時間になってしまうんですね。

Excelであるのならば、書式設定を利用して『[h]:mm:ss』と設定すれば、
普通に計算結果を表示することができます。

が…先ほども書きましたが、Accessではデータ型を時間として扱った場合
24時間までしか扱えない訳です。
24時の時点で、日付が変わって0時になってしまうわけですよ。

でも、労働時間とかを計算したい場合は、○○○時間のように、
24時間どころか、3桁の時間が発生するのが当たり前。
(時間外労働が3桁だったらかなり嫌ですけどね…┐(´~`;)┌ )

ではどうするか…ということで、今回の無駄コードはこれ!!

時間を文字列として扱うけど、計算しちゃってよ」コードです!!



どういう事かというと…Accessでは24時間を超える表示が
日付/時間型ではできない、でも文字列(テキスト型)であれば
表示はできる!!

じゃ~時間は文字列ではあるけれど、それを数値(秒)に変換したあとで、
計算を行い、その結果を時間に戻してあげちゃおうという算段です。

あ!ちなみに時間の表記は「12:34:56]の様な表記とします。
(分と秒は必ず2桁標記です。m(._.)m)

では、まず時間(文字列)を秒に変換するプロシージャから…。
Public Function Time2Value(strTime As String) As Long
'時間(文字列)を数値(秒数)に変換

Dim H As Long '時間
Dim M As Long '分
Dim S As Long '秒

strTime = Nz(strTime, "0:00:00")

S = CLng(Right(strTime, 2))
M = CLng(Mid(strTime, InStr(1, strTime, ":") + 1, 2)) * 60
H = CLng(Left(strTime, InStr(1, strTime, ":") - 1)) * 3600

Time2Value = S + M + H

End Function
説明する必要もないかもしれませんが、簡単に説明すると…引数の時間から
時(H)/分(M)/秒(S)にわけて、それぞれを秒に直しているだけですね。(^^ゞ

それを全部足しちゃえば、引数によって指定された時間(文字列)が秒数(数値)に変換
されたわけです。

これで秒数になったわけですから、簡単に計算に利用できるようになります。ヾ(〃^∇^)ノわぁい♪

あとは、色々と計算を行った後で、取得した秒数を時間の表記に戻してあげればよい!というわけで、
そのコードがこちら
Public Function Value2Time(LngSec As Long) As String
'数値(秒数)を時間(文字列に変換)

Dim H As Long '時間
Dim M As Long '分
Dim S As Long '秒

H = Int(LngSec / 3600)
M = Int((LngSec Mod 3600) / 60)
S = LngSec Mod 60

Value2Time = H & ":" & Format(M, "00") & ":" & Format(S, "00")

End Function
これでばっちりのはずです。

時間は、引数の秒数を、3600で割った商で求めれることができます。
そして分は、引数の秒数を3600で割った余りを60で割った商で求められます。
最後の秒は、引数の秒数を60で割った余りによって求められます。

時・分・秒のそれぞれを、時間標記の適応する箇所に入れ込んであげて出来上がりって
わけです。 ( ̄^ ̄) エッヘン!

ま~いつものごとく、大したことないコードですけどね…(;^_^A アセアセ

例によって、標準プロシージャ内に上記の2つのコードを記述しておけば
何処からでも呼び出すことができるようになります。

ちなみに、利用方法ですが…
Time2Value("11:22:33")
Value2Time(40953)
といった感じで利用できます。注意としては、Time2Valueの引数が文字列で指定されていて、
Value2Timeの引数は数値で指定されているところでしょうか…。

え?こんなコード不要? (・・?)...ですよね…(T-T)

いいんですよ…どうせ自分の備忘録なんですから。┐(´~`;)┌

では、約1年ぶりの更新もこの辺で…(^0^)/~~see you !

次回の更新は…いつかな…(-。-) ボソッ

(もし上記のコードを利用される場合は、
コード内でダブルクリック後に選択してコピーしてください。)
↑やる気アップにご協力をお願いします。わぁいヽ(∇⌒ヽ)(ノ⌒∇)ノわぁい♪

こんな記事もありますよ


コメントの投稿

非公開コメント

Author's Profile ~自己紹介~

Genzo

Author:Genzo
PCは一応自作できるレベル。
ワード・エクセルなら基本的に
扱えるレベル。
プログラム・・・?ん?
VBA・・・?ん?ん??
それって美味しいですか?


~ 当ブログについて ~

~ Mail2Genzo  ~

Calender&Search かれんだーと検索

07 | 2018/08 | 09
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

Access2Genzo内で検索

Category ~かてごりー~

Comments Tree ~こめんとつりー~


Link ~りんく~

ブロとも申請フォーム

Counter ~かうんた~

Since 2010/08/01:

Online:

タグクラウド

最新トラックバック

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。