ここでは、「計算式」の「時刻を15分・30分単位にまるめてから時間数を計算」のような通常マクロでは難しい時刻のまるめ処理をサンプルにします。
VBAの関数では、数値の「まるめ(切り捨て・切り上げ・四捨五入)」は「桁位置」が基本であり、時刻のまるめは困難です。
例えば15分単位であれば96分の1単位でのまるめ処理となってしまうからです。
(日付型では1日が1の増分であり、時刻の処理は小数扱いです。15分は「1/96日」になります。)
そのままやるなら96倍して小数を切り捨ててから、また96で割るなどと言う方法になります。
(画像をクリックすると、このサンプルがダウンロードできます)
「計算式」の「時刻を15分・30分単位にまるめてから時間数を計算」で説明してあるように「FLOOR関数」「CEILING関数」ではまるめの単位を「桁位置」ではなく、「値」で自在に指定できるので、このような場合に便利です。
'***************************************************************************************************
' マクロ上でワークシート関数を使うサンプル Module1(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'03/07/28(1.00)新規作成
'03/11/15(1.01)初回修正
'20/02/23(1.10)*.xlsm化、他
'***************************************************************************************************
Option Explicit
'***************************************************************************************************
' ■■■ ワークシート側からの呼び出し処理 ■■■
'***************************************************************************************************
'* 処理名 :TimeCeiling15Min
'* 機能 :時刻15分単位切り上げ
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年07月28日
'* 作成者 :井上 治
'* 更新日 :2020年02月23日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub TimeCeiling15Min()
'-----------------------------------------------------------------------------------------------
Dim dteTime1 As Date ' 算出前時刻
Dim dteTime2 As Date ' 算出後時刻
dteTime1 = Cells(4, 7).Value
' 上の時刻を15分単位で切り上げる(15分=1/96日)
dteTime2 = Application.WorksheetFunction.Ceiling(dteTime1, 1 / 96) ' ←①
' 計算結果の表示
MsgBox dteTime2
End Sub
'***************************************************************************************************
'* 処理名 :TimeFloor10Min
'* 機能 :時刻15分単位切り上げ
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年07月28日
'* 作成者 :井上 治
'* 更新日 :2020年02月23日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub TimeFloor10Min()
'-----------------------------------------------------------------------------------------------
Dim dteTime1 As Date ' 算出前時刻
Dim dteTime2 As Date ' 算出後時刻
dteTime1 = Cells(8, 7).Value
' 上の時刻を10分単位で切り捨てる(10分=1/144日)
dteTime2 = Application.WorksheetFunction.Floor(dteTime1, 1 / 144) ' ←②
' 計算結果の表示
MsgBox dteTime2
End Sub
'----------------------------------------<< End of Source >>----------------------------------------