Excel VBA嵌套CASE函数用于多个条件

3

我有一个SQL查询,想在Excel VBA中复制它。我在使用多个case语句时遇到了麻烦。

示例列

column(a) - segment_nbr

column(b) - ltv 

segment_nbr ltv 

1   2.1526521   
4   3.01348283  
1   1.49385324  
1   1.84731871  
1   1.29541322  
1   0.55659018  
2   2.33690417  
1   1.34068404  
2   1.54078719  
1   0.74087837  
3   1.93278303  
1   1.38347042  
4   1.64194326  

我想构建一个函数,来复制以下示例的嵌套if / case公式:

=if(and($A1=1,$B1<=0.9),100.01,IF(and($A1=1,$B1<=2.0),201.01,IF(and($A1=1,$B1<=3.0),-23.26,IF(and($A1=2,$B1<=0.9),-99.98,IF(and($A1=3,$B1<=1.3),199.98, IF(and($A1=4,$B1<=0.44),-32.43,IF(and($A1=4,$B1<=1.6),160.9,"" )))

我尝试了以下方法,但没有效果:它没有使用segment_nb参数。
你有什么想法如何纠正它吗?
Function ltv_w(segment_nbr, ltv )

Select Case ltv 
    Case Is <= 0.9 And segment_nbr = 1
        ltv_w = 100.01
    Case Is <= 2.0 And segment_nbr = 1
        ltv_w = 201.01
    Case Is <= 3.0 And segment_nbr = 1
        ltv_w = -23.26
    Case Is <= 0.9 And segment_nbr = 2
        ltv_w = -99.98
    Case Is <= 1.3 And segment_nbr = 3
        ltv_w = 199.98
    Case Is <= 0.44 And segment_nbr = 4
        ltv_w = -32.43
    Case Is <= 1.6 And segment_nbr = 4
        ltv_w = 160.9

End Select

End Function

你的代码对我有效。你如何在工作表中调用你的函数?(公式) - rellampec
是的,我试过了。当我尝试我的原始代码时,它没有接受段变更。 - Sparta
3个回答

2

首先 - 改变检查的顺序。
在第一级别中检查segment_nbr,然后在第二级别检查ltv

Function ltv_w(segment_nbr, ltv)

    Select Case segment_nbr
        Case 1
            Select Case ltv
                Case Is <= 0.9: ltv_w = 100.01
                Case Is <= 2#:  ltv_w = 201.01
                Case Is <= 3#:  ltv_w = -23.26
            End Select

        Case 2
        Case 3
        Case 4
    End Select
End Function

要注意使用 Case Is <= 语句。

还有一点很重要... 不要将浮点数用于相等比较
因此,类似于 <= 3# 的条件需要转换为 Not > 3#
.


1

使用Select Case ltv,只检查ltv的值,不像使用If并添加And,它会忽略第二个条件。

你可以在Select Case中“欺骗”一下,可以使用Select Case True,然后在其中嵌套修改你的代码:

Case ltv <= 0.9 And segment_nbr = 1

Try the code below:

Function ltv_w(segment_nbr, ltv)

Select Case True
    Case ltv <= 0.9 And segment_nbr = 1
        ltv_w = 100.01
    Case ltv <= 2# And segment_nbr = 1
        ltv_w = 201.01
    Case ltv <= 3# And segment_nbr = 1
        ltv_w = -23.26
    Case ltv <= 0.9 And segment_nbr = 2
        ltv_w = -99.98
    Case ltv <= 1.3 And segment_nbr = 3
        ltv_w = 199.98
    Case ltv <= 0.44 And segment_nbr = 4
        ltv_w = -32.43
    Case ltv <= 1.6 And segment_nbr = 4
        ltv_w = 160.9
End Select

End Function

@Sparta 不用谢,看看下面的链接,了解一下我们在 SO 上如何表示感谢:https://stackoverflow.com/help/someone-answers - Shai Rado

0
根据我的理解,您也可以使用if else语句实现这个功能,请查看下面的代码,它已经根据您的Excel公式修改过了。
''''
Function ltv_w(segment_nbr, ltv)

Select Case segment_nbr
    Case Is = 1

    Select Case ltv
    Case Is <= 0.9
    ltv_w = -99.98

    Case Is <= 2#
    ltv_w = 201.01

    Case Is <= 3#
    ltv_w = -23.26

    Case Else
    ltv_w = ""

    End Select

    Case Is = 2

    Select Case ltv
    Case Is <= 0.9
    ltv_w = -99.98

    Case Else
    ltv_w = ""

    End Select

    Case Is = 3

    Select Case ltv
    Case Is <= 1.3
    ltv_w = 199.98

    Case Else
    ltv_w = ""

    End Select

    Case Is = 4

    Select Case ltv
    Case Is <= 0.44
    ltv_w = -32.43

    Case Is <= 1.6
    ltv_w = 160.9

    Case Else
    ltv_w = ""

    End Select

Case Else
ltv_w = ""

End Select
End Function

''


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接