- 締切済み
access VBA 計算について
すいません。 http://qa.itmedia.co.jp/qa9245657.html で質問したのですがわかりにくいこのこの上ないと思うので、画像を添付させていただきました。 まるでかこった部分でできないものです。 関係するのは 点数 負割 入金 負担金 値引き なのですが [点数]*[負割]=負担金(四捨五入) が主な式で、これに負担金-入金=値引き という式はできています。 例外が負割が200の時で 200の時のみ、[点数]×3 という式にしたいのです これに出た数は 200以上の場合 例 600(点数)×3=1800 答えは1800ですが、強制的に200にしたいんです。 200以下の場合 45(点数)×3=135(第一位四捨五入で140) としたいのです。 例外200の場合がうまくいかないので、お分かりになる方お知恵をお貸しください。お願いします。 私が考案して間違えている式は以下になります。 Private Sub 負担金_BeforeUpdate(Cancel As Integer) If [負割] = 200 Then If [点数] * 3 > 200 = X Then X = 200 Else If ([点数] * 3 Mod 10) < 5 Then X = [点数] * 3 - ([点数] * 3 Mod 10) Else X = [点数] * 3 - ([点数] * 3 Mod 10) + 10 End If If [負割] < 199 Then If [点数] * [負割] Then Else If ([点数] * [負割] Mod 10) < 5 Then X = [点数] * [負割] - ([点数] * [負割] Mod 10) Else X = [点数] * [負割] - ([点数] * [負割] Mod 10) + 10 End If Public Function Rounds(ByVal M As Currency, _ ByVal A As Integer, _ Optional D As Integer = 0) As Variant Dim R As Currency Select Case A Case 0 ' 四捨五入 R = Fix(M * 10 ^ D + 0.5@) Case 1 '切り捨て R = Fix(M * 10 ^ D) Case 2 ' 切り上げ R = Rounds(M * 10 ^ D + 0.4@, 0) End Select Rounds = Sgn(M) * (R / 10 ^ D) End Function
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
負担金=[点数]*[負割] という式を、負割が200の時は[点数]×3に! ↓ 負担金=[点数]*IIF([負割]=200, 3, [負割]) ということ? なお、Rounds()は Option Compare Database Option Explicit Public Const 四捨五入 = 0 Public Const 切り捨て = 1 Public Const 切り上げ = 2 と記号定数を利用すると ? Rounds(0.5, 四捨五入) 1 ? Rounds(0.5, 切り捨て) 0 と読みやすく書く事ができます。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 良く理解出来ていないですが、 If [負割] = 200 Then X = [点数] * 3 If X > 200 Then X = 200 Else If (X Mod 10) < 5 Then X = X - (X Mod 10) Else X = X - (X Mod 10) + 10 End If End If ElseIf [負割] < 200 Then '[負割が200より大きいケースは無い? X = [点数] * [負割] If (X Mod 10) < 5 Then X = X - (X Mod 10) Else X = X - (X Mod 10) + 10 End If End If こういう事でしょうか?