ここに私の試みです。この関数は2つの引数をとります。四捨五入する日付とオプションのroundingThreshold
(バイト)です。このroundingThreshold
の値を変更すると、新しい丸めポイントを設定できます。現在は3と設定されています。つまり、3より大きい値は、次に近い15分間隔に丸められます。
実行するのはかなり速いはずです。私は6000の日付のようなテストを行い、1秒未満で完了しました。
Option Explicit
Public Function roundDate(dateIn As Date, _
Optional roundThreshold As Byte = 3) As Date
'get the minutes from the date
Dim minutes As Byte: minutes = Format(dateIn, "nn")
Dim revisedMin As Byte
'Determine if the item should be rounded up/down
If minutes Mod 15 > roundThreshold Then
'Round up to closest 15 minutes
'Use integer to round the number down, add 1, then multiply by 15
revisedMin = minutes + ((((minutes \ 15) + 1) * 15) - minutes)
Else
'Round down to the closest 15 min interval
revisedMin = minutes - minutes Mod 15
End If
'Rebuild the date with the rounded date
If Not revisedMin = 60 Then
roundDate = CDate(Format(dateIn, "hh") & ":" & revisedMin)
Else
roundDate = CDate(DateAdd("h", 1, Format(dateIn, "hh") & ":00"))
End If
End Function
試験結果:
Test Date Rounded Result
9:00:00 AM 9:00:00 AM
9:01:00 AM 9:00:00 AM
9:02:00 AM 9:00:00 AM
9:03:00 AM 9:00:00 AM
9:04:00 AM 9:15:00 AM
9:05:00 AM 9:15:00 AM
9:06:00 AM 9:15:00 AM
9:07:00 AM 9:15:00 AM
9:08:00 AM 9:15:00 AM
9:09:00 AM 9:15:00 AM
9:10:00 AM 9:15:00 AM
9:11:00 AM 9:15:00 AM
9:12:00 AM 9:15:00 AM
9:13:00 AM 9:15:00 AM
9:14:00 AM 9:15:00 AM
9:15:00 AM 9:15:00 AM
9:16:00 AM 9:15:00 AM
9:17:00 AM 9:15:00 AM
9:18:00 AM 9:15:00 AM
9:19:00 AM 9:30:00 AM
9:20:00 AM 9:30:00 AM
9:21:00 AM 9:30:00 AM
9:22:00 AM 9:30:00 AM
9:23:00 AM 9:30:00 AM
9:24:00 AM 9:30:00 AM
9:25:00 AM 9:30:00 AM
9:26:00 AM 9:30:00 AM
9:27:00 AM 9:30:00 AM
9:28:00 AM 9:30:00 AM
9:29:00 AM 9:30:00 AM
9:30:00 AM 9:30:00 AM
9:31:00 AM 9:30:00 AM
9:32:00 AM 9:30:00 AM
9:33:00 AM 9:30:00 AM
9:34:00 AM 9:45:00 AM
9:35:00 AM 9:45:00 AM
9:36:00 AM 9:45:00 AM
9:37:00 AM 9:45:00 AM
9:38:00 AM 9:45:00 AM
9:39:00 AM 9:45:00 AM
9:40:00 AM 9:45:00 AM
9:41:00 AM 9:45:00 AM
9:42:00 AM 9:45:00 AM
9:43:00 AM 9:45:00 AM
9:44:00 AM 9:45:00 AM
9:45:00 AM 9:45:00 AM
9:46:00 AM 9:45:00 AM
9:47:00 AM 9:45:00 AM
9:48:00 AM 9:45:00 AM
9:49:00 AM 10:00:00 AM
9:50:00 AM 10:00:00 AM
9:51:00 AM 10:00:00 AM
9:52:00 AM 10:00:00 AM
9:53:00 AM 10:00:00 AM
9:54:00 AM 10:00:00 AM
9:55:00 AM 10:00:00 AM
9:56:00 AM 10:00:00 AM
9:57:00 AM 10:00:00 AM
9:58:00 AM 10:00:00 AM
9:59:00 AM 10:00:00 AM
10:00:00 AM 10:00:00 AM
奇妙丸めます。 8:56は何になるでしょうか? 9時または8時45分ですか?そして8:40? –
8:56は9:00になります。時間が8:46 - 8:48の間であれば8:45になりますが、8:49 - 8:59の間は9:00になります。 – user3842383