お疲れ様です。
またまたプログラミングの話ですが、現在社内用タイムレコーダー開発なんぞもしております。
実際打刻は分単位でしていても計上は5分とか15分単位ってことがあります。
そんな計上の単位に進めたり戻したりを「丸め」と私は言うのですが・・・。
これって機械にやらすための仕組みが必要なわけで、なんとか簡単に済ませたいものなので関数作りました。
関数ってのは何か引数渡すと戻り値が帰ってくるやつです・・はい。
Function Ttrim(ByVal a As Long, t As String, s As Boolean) As String
Dim tm As Variant, y As Long
Dim h As Long, m As Long
tm = Split(t, ":") '時間を時と分に分ける
h = tm(0) '時
m = tm(1) '分
If m <> 0 Then '分が00丁度なら処理しない
Select Case s 'IN OUTの判定
Case True 'INの場合
y = WorksheetFunction.RoundUp(m / a, 0) * a
If y >= 60 Then '繰上げ処理
h = h + 1
m = 0 '繰り上がると分は0強制
Else
m = y
End If
Case False 'OUTの場合
y = WorksheetFunction.RoundDown(m / a, 0) * a
m = y
End Select
End If
Ttrim = h & ":" & Format(m, "00")
End Function
(実際はインデントしてあります)
こんな感じですねぇ。
引数として変数aは丸め単位 tは打刻時間 sは出退勤フラグとなってます。
これでめでたくメインのプロシージャーでTtrim(15,"6:52",true)などと使用(実際マジックナンバーの部分は変数)すると7:00と丸め値が帰ってきます。
一件落着・・・・・・。
ロジックは直接私に聞いてください・・。
雑な関数だったらすみません・・・・。
私なんてったって3流プログラマーですから・・・。
えっ?専門分野やめろって?
・
・
・
・
メンゴメーーンゴッ!
Kemayan☆
またまたプログラミングの話ですが、現在社内用タイムレコーダー開発なんぞもしております。
実際打刻は分単位でしていても計上は5分とか15分単位ってことがあります。
そんな計上の単位に進めたり戻したりを「丸め」と私は言うのですが・・・。
これって機械にやらすための仕組みが必要なわけで、なんとか簡単に済ませたいものなので関数作りました。
関数ってのは何か引数渡すと戻り値が帰ってくるやつです・・はい。
Function Ttrim(ByVal a As Long, t As String, s As Boolean) As String
Dim tm As Variant, y As Long
Dim h As Long, m As Long
tm = Split(t, ":") '時間を時と分に分ける
h = tm(0) '時
m = tm(1) '分
If m <> 0 Then '分が00丁度なら処理しない
Select Case s 'IN OUTの判定
Case True 'INの場合
y = WorksheetFunction.RoundUp(m / a, 0) * a
If y >= 60 Then '繰上げ処理
h = h + 1
m = 0 '繰り上がると分は0強制
Else
m = y
End If
Case False 'OUTの場合
y = WorksheetFunction.RoundDown(m / a, 0) * a
m = y
End Select
End If
Ttrim = h & ":" & Format(m, "00")
End Function
(実際はインデントしてあります)
こんな感じですねぇ。
引数として変数aは丸め単位 tは打刻時間 sは出退勤フラグとなってます。
これでめでたくメインのプロシージャーでTtrim(15,"6:52",true)などと使用(実際マジックナンバーの部分は変数)すると7:00と丸め値が帰ってきます。
一件落着・・・・・・。
ロジックは直接私に聞いてください・・。
雑な関数だったらすみません・・・・。
私なんてったって3流プログラマーですから・・・。
えっ?専門分野やめろって?
・
・
・
・
メンゴメーーンゴッ!
Kemayan☆
| 22:21
コメント