プロが教えるわが家の防犯対策術!

Excelのマクロにて30分単位の計算方法についてご存知の方宜しくお願いします。

8:01~8:30のデータを8:30に変換
8:31~9:00のデータを9:00に変換
という様に30分単位で時間の切り上げ計算

8:00~8:29のデータを8:00に変換
8:30~8:59のデータを8:30に変換
という様に30分単位で時間の切り捨て計算

セルにCEILING(A1,"0:30")やFLOOR(A1,"0:30")を使用して記述しても良かったのですが
パターンが多すぎてセルに記述する事が出来ませんでした。(文字数制限の為)
ので、マクロでの記述方法をご存知の方宜しくお願いします。

A 回答 (4件)

要はマクロでワークシート関数が使えればいいという感じ?



Application.WorksheetFunction.Ceiling
Application.WorksheetFunction.Floor

でどーかな?

この回答への補足

失礼しました。
Application.WorksheetFunction.Ceiling
Application.WorksheetFunction.Floor
を使用して作成する事ができました。

Worksheets("sheet").Range("A2").Value = Application.WorksheetFunction.Floor(Worksheets("sheet").Range("A1").Value, Worksheets("sheet").Range("B1").Value)
でエラーになっていたのは書いていた位置がずれていました。
申し訳ございません。
ありがとうございます。

補足日時:2009/03/09 15:43
    • good
    • 0
この回答へのお礼

書き込みありがとうございます。

早速実行してみたところ、オブジェクトがありませんとでてしまい
使い方がよく分かりません。
もしよろしければ参考コードを記述していただけないでしょうか?

下記コードでテストしてみました。
Worksheets("sheet").Range("A2").Value = Application.WorksheetFunction.Floor(Worksheets("sheet").Range("A1").Value, Worksheets("sheet").Range("B1").Value)

A1にテスト用の時間(8:01)
B1に0:30
を入れて実施してみました。

お礼日時:2009/03/09 10:01

訂正します。




'Cells("A4") に = 出社(A3)



'Cells("A4") に = 退社(A3)
    • good
    • 1

'基本形として・・・



'Cells("A1")に出社時刻を入れ
'Cells("A2") に = 出社(A1)


'Cells("A3")に出社時刻を入れ
'Cells("A4") に = 出社(A3)

'って感じでどうでしょうか?

'なお下のソースは標準モジュールにかいてください。

Function 退社(pTime As Date) As Date

Dim pMin As Long
Dim pHr As Long
Dim RT As Date

pMin = CLng(Split(Format(pTime, "hh:mm"), ":")(1))
pHr = CLng(Split(Format(pTime, "hh:mm"), ":")(0))

If pMin = 0 Then
RT = CDate(pHr & ":" & "00")
ElseIf pMin > 0 And pMin <= 30 Then
RT = CDate(pHr & ":" & "00")
Else
RT = CDate(pHr & ":" & "30")
End If

退社 = RT

End Function



Function 出社(pTime As Date) As Date

Dim pMin As Long
Dim pHr As Long
Dim RT As Date

pMin = CLng(Split(Format(pTime, "hh:mm"), ":")(1))
pHr = CLng(Split(Format(pTime, "hh:mm"), ":")(0))

If pMin = 0 Then
RT = CDate(pHr & ":" & "00")
ElseIf pMin > 0 And pMin <= 30 Then
RT = CDate(pHr & ":" & "30")
Else
RT = CDate(pHr + 1 & ":" & "00")
End If

出社 = RT

End Function
    • good
    • 0
この回答へのお礼

書き込みありがとうございます。

時間を分割して条件で分岐すれば一番簡単だったかもしれません。
関数にこだわりすぎていて気づきませんでした。
ありがとうございます。

お礼日時:2009/03/09 15:48

「パターンが多すぎて…」と言う所が引っかかります。



8時台は切り上げだけど、9時台は切り捨てで、12時台はそのまんま……。
の様な意味ですか?
文字数制限に引っかかると言うのは相当な事だと思います。
もう少し詳細な情報があれば、回答もしやすいのですが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

説明が不足していて申し訳ございません。

>8時台は切り上げだけど、9時台は切り捨てで、12時台はそのまんま……。
>の様な意味ですか?
その様な意味です。

現在勤怠のシステムを作成しています。
旨く説明が出来ないので例を書き込みます。

切り上げの場合
出社間
 8:00前に出勤していた場合は、8:00
 20分遅刻をしていた場合は(8:20)30分単位で計算するので8:30

切捨ての場合
退社時
 18:20にあがった場合は、30分単位で計算するので18:00

という様な計算をしたいです。

>文字数制限に引っかかると言うのは相当な事だと思います。
そうですね。パターンが多すぎて困っています。
夜勤の人、日勤の人、遅刻をした人、半休を使用した人、などなどの
パターンがある為、セルの文字数制限に引っかかってしまいました。

お礼日時:2009/03/06 16:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A