【问题标题】:Excel VBA if/elseif function with multiple conditions and dropdowns具有多个条件和下拉列表的 Excel VBA if/elseif 函数
【发布时间】:2017-01-27 21:49:53
【问题描述】:

我是 VBA 新手,目前使用它来创建一个函数,该函数使用三个标准来输出计算结果。三个输入单元格包括一个数值(“emissionsquantity”)和两个文本值(“gas”和“units”,两者都具有从下拉菜单中选择的值。

我基本上想创建一个函数,根据从下拉菜单中选择的值计算结果。例如,如果下拉 B(“gas”)列出了某个值,下拉 C“units”列出了某种类型的单位度量,我想使用 A 列中的数量来计算最终值。以下是我目前开始开发的(针对三种污染物类型之一):

Function CO2EquivalentEmissions(emissionsquantity As Double, gas As String, units As String)
    If (gas = "CH4" Or "ch4") And units = "tons" Then
        CO2EquivalentEmissions = emissionsquantity * 25
    ElseIf (gas = "CH4" Or "ch4") And units = "lbs" Then
        CO2EquivalentEmissions = (emissionsquantity / 2000) * 25
    ElseIf (gas = "CH4" Or "ch4") And units = "tonnes" Then
        CO2EquivalentEmissions = (emissionsquantity * 1.10231) * 25
End If
End Function

然而,使用这个函数,我得到的结果是 0.00,不管我为“排放量”使用哪个值。有什么建议吗?非常感谢!

【问题讨论】:

  • 试试我下面回答中的代码

标签: string vba excel function


【解决方案1】:

你对如何测试字符串有点困惑,你放错了"的位置,见下面的代码:

Function CO2EquivalentEmissions(emissionsquantity As Double, gas As String, units As String)

If gas = "CH4" And units = "tons" Then
    CO2EquivalentEmissions = emissionsquantity * 25
ElseIf gas = "CH4" And units = "lbs" Then
    CO2EquivalentEmissions = (emissionsquantity / 2000) * 25
ElseIf gas = "CH4" And units = "tonnes" Then
    CO2EquivalentEmissions = (emissionsquantity * 1.10231) * 25
End If

End Function

编辑 1:更新更正 Function(包括 Or 用于 gas 标准)

Function CO2EquivalentEmissions(emissionsquantity As Double, gas As String, units As String)

If (gas = "CH4" Or gas = "ch4") And units = "tons" Then
    CO2EquivalentEmissions = emissionsquantity * 25
ElseIf (gas = "CH4" Or gas = "ch4") And units = "lbs" Then
    CO2EquivalentEmissions = (emissionsquantity / 2000) * 25
ElseIf (gas = "CH4" Or gas = "ch4") And units = "tonnes" Then
    CO2EquivalentEmissions = (emissionsquantity * 1.10231) * 25
End If

End Function

【讨论】:

  • 谢谢,谢。是的,这是我的疏忽。我稍微调整了我的代码并添加了括号以允许 CH4 的小写和大写拼写,但我现在得到了#VALUE! Excel 中的错误。有任何想法吗?我在上面发布了修改后的代码。
  • @user6851629 您使用Or 的语法不正确。查看我编辑的代码
【解决方案2】:

OR 条件中有一个小错误。要么这样做:

Function CO2EquivalentEmissions(emissionsquantity As Double, gas As String, units As String)
If (gas = "CH4" Or gas = "ch4") And units = "tons" Then
    CO2EquivalentEmissions = emissionsquantity * 25
ElseIf (gas = "CH4" Or gas = "ch4") And units = "lbs" Then
    CO2EquivalentEmissions = (emissionsquantity / 2000) * 25
ElseIf (gas = "CH4" Or gas = "ch4") And units = "tonnes" Then
    CO2EquivalentEmissions = (emissionsquantity * 1.10231) * 25
End If
End Function

或包含选项比较文本,这将使所有“文本比较”不区分大小写,因此您只需进行一次检查,这将适用于 CH4、cH4 等:

Option Compare Text
Function CO2EquivalentEmissions(emissionsquantity As Double, gas As String, units As String)

If (gas = "ch4") And units = "tons" Then
    CO2EquivalentEmissions = emissionsquantity * 25
ElseIf (gas = "ch4") And units = "lbs" Then
    CO2EquivalentEmissions = (emissionsquantity / 2000) * 25
ElseIf (gas = "ch4") And units = "tonnes" Then
    CO2EquivalentEmissions = (emissionsquantity * 1.10231) * 25

如果结束 结束函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2020-01-09
    相关资源
    最近更新 更多