• 締切済み

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

みんなの回答

回答No.2

負担金=[点数]*[負割] という式を、負割が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)
回答No.1

こんにちは 良く理解出来ていないですが、   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 こういう事でしょうか?

関連するQ&A