如何在excel / vba中做一个特殊types的舍入

我必须为我的学校项目做一个特殊types的excel四舍五入。

如果这个数字大于#.5,我必须四舍五入。 如果这个数字等于#.5,我必须将它舍入到最接近的偶数。 如果这个数字less于#.5,我必须把它整理下来。

我希望有人能够帮助我。

Dim getal As Decimal = Nothing Console.WriteLine("voer een nummer in") getal = Console.ReadLine() Dim dec As Integer = Nothing Console.WriteLine("voer het aantal deciale in") dec = Console.ReadLine() Dim factor As Integer = 0 Dim floor As Decimal = 0 Dim decimaal As Decimal = 0 Dim antwoord As Decimal = 0 Dim percentage As Decimal = 0 Dim GetalTimesFactor As Decimal = 0 Dim OnNoukeurigheid As Decimal = 0 Dim VerFactor As Integer = 0 Dim HasFactor As Boolean = False Dim notation As String = Nothing Dim RoundUp As Decimal = 0 If getal > 1000 Then While getal > 10 getal = getal / 10 VerFactor = VerFactor + 1 HasFactor = True End While Console.WriteLine("getal: " & getal) End If If getal < 0.0001 Then While getal < 1 getal = getal * 10 VerFactor = VerFactor - 1 HasFactor = True End While End If Select Case dec Case 0 factor = 1 OnNoukeurigheid = 0.5 RoundUp = 1 Case 1 factor = 10 OnNoukeurigheid = 0.05 RoundUp = 0.1 Case 2 factor = 100 OnNoukeurigheid = 0.005 RoundUp = 0.01 Case 3 factor = 1000 OnNoukeurigheid = 0.0005 RoundUp = 0.001 End Select GetalTimesFactor = getal * factor floor = Decimal.Floor(GetalTimesFactor) floor = floor / factor decimaal = getal - floor Console.WriteLine("floor: " & floor) If decimaal > OnNoukeurigheid Then floor = floor * factor antwoord = floor + 1 antwoord = antwoord / factor ElseIf decimaal = OnNoukeurigheid Then antwoord = Decimal.Round(getal, dec, MidpointRounding.ToEven) Else Console.WriteLine("decimaal: " & decimaal) Console.WriteLine("getal: " & getal) percentage = (decimaal / getal) * 100 If percentage < 5 Then Console.WriteLine("percentage is: " & Decimal.Round(percentage, 1) & "%") antwoord = floor Else Console.WriteLine("percentage is: " & Decimal.Round(percentage, 1) & "%") antwoord = floor + RoundUp End If End If If HasFactor Then notation = "E" & Format(VerFactor, "00") End If Console.WriteLine(antwoord & notation) Console.ReadLine() 

这是我在expression它做的工作,但它不适用于macros观

请注意:对不起荷兰的可变物

在VBA中,这非常简单,因为VBA Round函数做了这样的Rounding:

 Function VBARound(N As Double, Optional NumPlaces As Long = 0) As Double VBARound = Round(N, NumPlaces) End Function 

NUMPLACES将允许您可以select四舍五入到整数以外。

我有点不确定这是否是你所寻找的,因为在你的描述中,你似乎只是把整数作为结果,所以我省略了第二个variables来包含更多的小数点以保持简单。 我想我把你的四舍五入解释成与前面的答案稍有不同,例如在.5的情况下,你会select四舍五入到哪一个都是偶数(不知道为什么会这样,但如果是在这里,你走! )。

我道歉我的草率格式…我是一个自学的VBA用户,所以可能有一个更有效的方式:

 Function CustomRound(N As Double) If N - Application.WorksheetFunction.RoundDown(N, 0) = 0.5 Then If Application.WorksheetFunction.RoundDown(N, 0) Mod 2 = 0 Then CustomRound = Application.WorksheetFunction.RoundDown(N, 0) Else CustomRound = Application.WorksheetFunction.RoundUp(N, 0) End If Else CustomRound = Round(N, 0) End If End Function