VBプログラマ質問スレ(6.0以前) Part38
■ このスレッドは過去ログ倉庫に格納されています
0681デフォルトの名無しさん
NGNGうまくいきません。アドバイスをお願いします
'*****************************************************************
' 割り算
' 少数丸め位置[ 1=第1位 2=第2位 3=第3位、以外は第四位]
' 丸め[G_切り捨て,G_四捨五入,G_切り上げを使用する、以外は切り捨て]
'*****************************************************************
Public Function 割り算(ByVal 分子 As Variant, ByVal 分母 As Variant, Optional ByVal 少数丸め位置 As Integer = 0, Optional ByVal 丸め As Integer = G_切り捨て) As Variant
Dim 最大v As Variant
Dim 補正v As Variant
Dim 調整v As Variant
Dim 少数v As Variant
Dim 結果v As Variant
最大v = CDec("1000000000000000")
補正v = CDec("10000")
If VarType(分子) = vbDecimal Then 分子 = 分子 - Fix(分子 / 最大v) * 最大v: 分子 = CDec(Fix(分子 * 補正v) / 補正v) Else 分子 = CDec(0)
If VarType(分母) = vbDecimal Then 分母 = 分母 - Fix(分母 / 最大v) * 最大v: 分母 = CDec(Fix(分母 * 補正v) / 補正v) Else 分母 = CDec(0)
If 少数丸め位置 < 1 Or 少数丸め位置 > 4 Then 少数丸め位置 = 4
少数v = CDec((10 ^ (少数丸め位置 + 1)) / 10)
Select Case 丸め
Case G_四捨五入: 調整v = CDec(0.5)
Case G_切り上げ: 調整v = CDec(0.9999)
Case Else: 調整v = CDec(0)
End Select
If 分子 = 0 Or 分母 = 0 Then
割り算 = CDec(0)
Else
結果v = CDec(Fix(((分子 * 少数v) / 分母) + (調整v)))
結果v = CDec(結果v / 少数v)
割り算 = CDec(結果v - Fix(結果v / 最大v) * 最大v)
End If
End Function
■ このスレッドは過去ログ倉庫に格納されています