【问题标题】:Excel VBA nested case function for multiple conditions用于多个条件的 Excel VBA 嵌套案例函数
【发布时间】:2018-03-22 05:20:06
【问题描述】:

我有一个 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

【问题讨论】:

  • 您的代码对我有用。你如何在工作表中调用你的函数? (公式)
  • 是的,我做到了。当我尝试我的原始代码时,它没有进行段更改

标签: vba excel if-statement case


【解决方案1】:

首先 - 更改检查顺序。
在第一个案例级别检查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 &lt;= 序列。

再一次...... 永远不要比较双打的平等
所以像&lt;= 3#这样的条件需要转换成Not &gt; 3#
.

【讨论】:

    【解决方案2】:

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

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

    Case ltv <= 0.9 And segment_nbr = 1
    

    试试下面的代码:

    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
    

    【讨论】:

    【解决方案3】:

    根据我的理解,你也可以用 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
    

    ''

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      相关资源
      最近更新 更多