VBA自定义IF功能不​​起作用

时间:2014-11-26 08:45:32

标签: excel-vba vba excel

我有以下IF声明:

lF(C:C=CE,0.3,(IF(C:C=CS,0.2,(IF( C:C=TE,0.2,(IF( C:C=MV,0.25,(IF( C:C=HCV,0.375,(IF( C:C=HM,0.3,(IF( C:CLM,0.125,(IF( C:C=FF,0.125,(IF( C:C=OE,0.3,0))))))))))

然后我在第一个VBA模块中作为函数输入:

Function DepRate(pVal As String) As Long

   If pVal = "HCV" Then
      DepRate = 0.375

   ElseIf pVal = "OE" Then
      DepRate = 0.3

   ElseIf pVal = "CE" Then
      DepRate = 0.3

   ElseIf pVal = "CS" Then
      DepRate = 0.2

   ElseIf pVal = "TE" Then
      DepRate = 0.2

   ElseIf pVal = "MV" Then
      DepRate = 0.25

   ElseIf pVal = "FF" Then
      DepRate = 0.125

   ElseIf pVal = "LM" Then
      DepRate = 0.125

   Else
      DepRate = 0
   End If

End Function

当在excel上使用该函数时,即使特定单元格中的值为true,结果也始终为0。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是一个引用命名范围的公式。因此,例如C:C = CE正在将C列中的值与指定范围CE进行比较。

所以例如你需要有这样的函数......

Function DepRate(pVal As String) As Long

   If pVal = ActiveSheet.Range("HCV").Value Then
      DepRate = 0.375
etc... etc..

Veve说,你也可以使用Select..Case。但也许更好的方法是将值保存在隐藏的工作表中,然后可以更容易地配置查找。

我很想知道命名范围CE中的内容是什么? (公式>名称管理员)