检查/纠正佣金水平的功能(If-Then-ElseIf等)

时间:2014-06-06 20:02:12

标签: vba excel-vba excel

尝试设计一个功能,允许我输入过去一个月的销售收盘价和交易佣金,然后根据交易方式返回“低”,“高”或“确定”与我们办公室的佣金图表相匹配。

例如,如果交易价格为25,000美元且记录的佣金为2%,则该功能应根据下表返回“HIGH”。

Up to $49,999           1.50%
$50,000- $99,999             1.25%
$100,000-$199,999        0.85%
$200,000-$399,999        0.75%
$400,000-$699,999        0.50%
$700,000-$999,999        0.30%
$1,000,000-$1,499,999    0.20%
$1,500,000 and above        0.10%

我到目前为止的代码如下;我只分享了第一行,因为那是我一直在测试的。有更多重复的部分具有不同的数字,以反映图表的级别。

功能FeeChecker(x,y)

If 50000 > x > 0 Then

    If y > 1.5 Then FeeChecker = "HIGH"
    ElseIf y < 1.5 Then FeeChecker = "LOW"
    ElseIf y = 1.5 Then FeeChecker = "OKAY"
    End If

End Function

(完全披露,自从我使用VBA已经有一段时间了,所以如果我犯了一个明显的错误,请继续关注)到目前为止我可以让它返回“LOW”和“OKAY”没有问题,但当我使用更高的佣金率时,它返回数字0而不是“高”。我需要添加/更改什么? TIA

3 个答案:

答案 0 :(得分:0)

您可能需要将FeeChecker = "HIGH"代码(和LOW和OKAY相同)放在不同的行上。将Then部分放在与If部分相同的行上的语法没有相应的End If。我还没有测试过这个变化,这是我做的第一件事:

If y > 1.5
    Then FeeChecker = "HIGH"
ElseIf y < 1.5
    Then FeeChecker = "LOW"
Else ' y = 1.5
    Then FeeChecker = "OKAY"
End If

答案 1 :(得分:0)

一种方法是使用Select Case语句,如下所示:

Function FeeChecker(Deal As Double, Commission As Double)

    Select Case Deal     

        Case Is <= 49999            
            FeeChecker = IIf(Commission < 1.5, "Low", IIf(Commission > 1.5, "High", "Okay"))

        Case Is <= 99999            
            FeeChecker = IIf(Commission < 1.25, "Low", IIf(Commission > 1.25, "High", "Okay"))            

    End Select

End Function

您可以添加额外的案例陈述以适合您的佣金表。

答案 2 :(得分:0)

1)是的,它似乎想要你自己的线路上的FeeChecker =“High” 2)你错过了End If。两个Ifs。只有一个结束If。 3)为什么使用外环和硬编码50000和1.5?为什么不将数据放在Excel电子表格的表格中?使其成为税表格式,以便您可以使用不寻找精确值的查找函数(比如与最后一个参数1匹配)。那么你只需要内部的If语句。

Function FeeChecker(x,y)
    ' Lookup y value based on x from table and store as commPct
    If y > commPct Then
        FeeChecker = "HIGH"
    ElseIf y < commPct Then
        FeeChecker = "LOW"
    ElseIf y = commPct Then
        FeeChecker = "OKAY"
    End If
End Function