If statement 如何索引匹配单元格中设置的条件

If statement 如何索引匹配单元格中设置的条件,if-statement,excel-formula,match,lookup-tables,If Statement,Excel Formula,Match,Lookup Tables,我试图通过索引匹配一个表来避免使用多重if公式,但是我需要匹配的是实际条件和字符串 查找表: A列:数据值 B列:数据字符串 C列:输出公式 我需要一个公式,将数据值与查找条件匹配,将数据字符串与查找字符串匹配,并输出返回值。我知道您不一定要求VBA解决方案,但我和许多其他人更喜欢使用UDF,因为在我看来,它使阅读公式变得更容易和更干净,而且你可以不用辅助细胞 我们通过创建Select Case语句开始您的UDF。我们可以选择对案例使用数值或字符串。我决定顺其自然 在每种情况下,您将比较提供给l

我试图通过索引匹配一个表来避免使用多重if公式,但是我需要匹配的是实际条件和字符串

查找表:

A列:数据值 B列:数据字符串 C列:输出公式
我需要一个公式,将数据值与查找条件匹配,将数据字符串与查找字符串匹配,并输出返回值。

我知道您不一定要求VBA解决方案,但我和许多其他人更喜欢使用UDF,因为在我看来,它使阅读公式变得更容易和更干净,而且你可以不用辅助细胞

我们通过创建Select Case语句开始您的UDF。我们可以选择对案例使用数值或字符串。我决定顺其自然

在每种情况下,您将比较提供给lngCondition参数的数值,该参数最终将值返回给函数

因为您没有任何情况下文本值的lngCondition=0,所以我让它返回一个工作表错误代码值,正如您从任何其他Excel公式中所期望的那样。这就是UDF具有可变返回类型的原因

公共函数ReturnErrorCodelngCondition作为Long,strComment作为String作为Variant 选择案例strComment 案例 如果lngCondition=0,则 ReturnErrorCode=1 其他的 ReturnErrorCode=-1 如果结束 案例OK-损失 如果lngCondition>0,则 ReturnErrorCode=0 如果条件小于0,则 ReturnErrorCode=1 其他的 '您的条件没有指定“确定-损失” '可以有一个0值 ReturnErrorCode=CVerrxlerValue 如果结束 案例OK-新销售 如果lngCondition<0,则 ReturnErrorCode=0 如果lngCondition>0,则 ReturnErrorCode=1 其他的 '您的条件没有指定“确定-新销售” '可以有一个0值 ReturnErrorCode=CVerrxlerValue 如果结束 其他情况 ReturnErrorCode=CVerrxlerValue 结束选择 端函数 然后在工作表中使用以下公式:

=ReturnErrorCode(A1, B1)
太好了!但我对VBA一无所知,也不知道如何添加自定义项

首先,需要打开VBA编辑器。您可以同时按Alt+F11来执行此操作。 接下来,您需要创建一个标准代码模块。在VBE中,单击“插入”,然后选择“模块而不是类模块!”!。 然后复制上面的代码,并将其粘贴到刚刚创建的新代码模块中。 由于现在已将VBA代码添加到工作簿中,因此下次保存时需要将其另存为启用宏的工作簿。
很有帮助,完美地解决了我的问题。出于好奇,是否可以使用excel定义的公式?是否可以使用正常的工作表公式?当然,但那不是我的能力范围。我相当精通VBA,但不太熟悉工作表公式。这里有很多人可以使用Excel公式,如果您仍然需要这种类型的解决方案,我建议您取消将我的答案标记为您接受的答案。这让其他人知道您仍在寻找替代解决方案。你不会伤害我的感情:-
+---+------------------+-------------------+-------+
|   |        A         |         B         |   C   |
+---+------------------+-------------------+-------+
| 1 | Current to Prior | Portfolio comment | Error |
| 2 | 0                |                   | 1     |
| 3 | -100             | OK – Losses       | 1     |
| 4 | 50               |                   | -1    |
| 5 | 200              | OK – Losses       | 0     |
| 6 | 0                |                   | 1     |
| 7 | -400             | OK – New Sales    | 0     |
| 8 | 0                |                   | 1     |
+---+------------------+-------------------+-------+
=ReturnErrorCode(A1, B1)