在UDF中嵌套[价格浮动且接近7]

时间:2018-08-19 18:05:09

标签: excel excel-vba excel-formula

我正在尝试编写定价函数并将其导出为Excel加载项。我希望该函数将一个整数作为参数传递给该函数,将其值乘以一个百分比,然后以最接近7的数字的形式输出该市值。

例如:如果我要标记某件花费150美元的物品,价格上涨45%,然后四舍五入为:

费用:150 * 1.45,然后是MROUND(X,10)-3

到目前为止,我的功能是

Function MARKUP(c as Integer) as Integer

If c < 20 Then
    MARKUP = (c) * 1.5

ElseIf c < 40 Then
    MARKUP = (c) * 1.4

Else
    MARKUP = (c) * 1.3

End If
End Function

很显然,我可以将该值传递到'MROUND([cell],10)-3)'中,以将标记的值精确到7,但是最终用户将不是愿意解决此问题的人。

如果可能的话,我希望这是一个1步的过程。我无法想象如何将MROUND()函数嵌套到自定义MARKUP()函数中。


我在想伪代码类似于:

    Function MARKUP(c as Integer) as Integer

If c < 20 Then
    MARKUP = (c) * 1.5

ElseIf c < 40 Then
    MARKUP = (c) * 1.4

Else
    MARKUP = (c) * 1.3

End If

MARKUP = (MROUND(C,10)-3) [???]

End Function

1 个答案:

答案 0 :(得分:3)

只需从VBA调用WorksheetFunction,如下所示:

MARKUP = Application.WorksheetFunction.MRound(c * 1.5, 10) - 3

在分析一个变量(Select Case)时,

c是我的首选方法。另外,与c as Long相比,integer可能是更安全的路线(由@QHarr建议)

Function MARKUP(c As Long) As Integer

Select Case c
    Case c < 20
        MARKUP = Application.WorksheetFunction.MRound(c * 1.5, 10) - 3
    Case c < 40
        MARKUP = Application.WorksheetFunction.MRound(c * 1.4, 10) - 3
    Case Else
        MARKUP = Application.WorksheetFunction.MRound(c * 1.3, 10) - 3
End Select

End Function