前回に引き続き、有限会社パーツの業務システム開発で実際に使用されている共用関数をご紹介してみようと思う。
第2回目は『桁丸めの処理』。
円未満を切り捨てるのでしたら、 Int(変数) や Fix(変数) といった関数が便利です。
うちでは官公庁向け財務パッケージの開発も行っているので、1億円未満を切り捨てたり、10万円単位に丸める処理をよく行います。
また、家のローンなどでよく見かける元利が一定額である「元利金等償還」方式の計算には「賦金率」という小数点第3位までの率を算出します。
このような背景から、桁のまるめ処理を関数で安全に行い、保守性を高めることにしました。
コンセプトは以下のとおりです。
■まるめを行う桁位置(小数点を含む)を指定できること。
■切捨てができること。
■切り上げができること。
■四捨五入が出来ること。
関数は以下のとおりです。
■U_Marume 桁まるめ関数
《使用方法》
引数に、まるめを行う値、丸める桁位置、丸め方を渡して呼び出す。
次の画面へ行くボタンで関数を呼び出す。
'10万未満を切り上げる
wMarumeGankin = U_Marume(wGankin, -5, cnKiriage)
'円未満を切り捨てる切り捨てる
wMarumeGankin = U_Marume(wGankin, 0, cnKirisute)
'小数点第3位を四捨五入する
wMarumeGankin = U_Marume(wGankin, 3, cnKirisute)
《関数》
'まるめ区分 Enum typeMarume cnNone = 0 '何もしない cnKirisute = 1 '切捨て cnKiriage = 2 '切上げ cnSishagonyu = 3 '四捨五入 End Enum Function U_Marume(ByVal I_Num As Variant, ByVal I_Keta As Integer, ByVal I_Shori As Byte) As Variant '桁まるめ処理 'I_Num :数字 'I_Keta :丸め位置 'I_Shori :処理(0:何もしない、1:切り捨て、2:切り上げ、3:四捨五入) Dim wKingaku As Variant Dim wshift As Variant Dim WMODE As Byte Const MARU_CUT As Byte = 0 Const MARU_45 As Byte = 5 Const MARU_UP As Byte = 9 If I_Shori = 0 Then U_Marume = CDec(I_Num) Exit Function End If Select Case I_Shori Case 1 WMODE = MARU_CUT Case 2 WMODE = MARU_UP Case 3 WMODE = MARU_45 Case Else Exit Function End Select wKingaku = CDec(I_Num) wshift = CDec(10 ^ (I_Keta + 1)) U_Marume = CDec(Fix((wKingaku * wshift + CDec(WMODE)) / 10) / CDec(wshift / 10)) End Function
もし使われた場合はご報告いただければ嬉しいです。
しかし、いかなる責任も負いませんのでご理解のほどを^^