Excel - 将带有if条件的字符串转换为公式

时间:2015-03-03 09:36:08

标签: excel excel-vba excel-formula vba

我想在Excel中使用Excel中的EVALUATE-Function来表示if语句。

我遇到了以下问题:我想使用Excel来验证我的数据。我有三张纸:

  1. 我想检查的真实数据。每行代表一个客户,每列代表一些数据。这些列具有特定的名称,如“年龄”,“名称”,......
  2. 我想要执行的支票的描述。每行代表一张支票,我有3列:1 check_id - 每张支票的标识符; 2 check_desc - 每个正常人都可以理解的检查说明,如“18岁以下”; 3规则 - Excel公式为字符串,如If(age< 18,“error”,“no error”)
  3. 纸张1和2应该放在一起的地方。每行应代表一个客户,每列应检查一次。
  4. 现在,如果我有例如check_1“如果(年龄<18岁,”错误“,”没有错误“)”和客户数据10和20,那么第一个客户的检查应该开始检查对于第二个不应该。 如果数据被更改,并且年龄设置为10到18,那么一切都应该没问题,或者如果规则更改为“If(年龄<21,”错误“,”没有错误“)”那么新条件应该应用于所有数据。

    这样的事情可能吗? 使用evaluate函数,只有“简单”的公式可以工作。

    提前致谢, 马丁

    附上你可以找到 Excel-Sample File

2 个答案:

答案 0 :(得分:0)

你肯定需要一些VBA。制作自定义EVAL功能:

Public Function EVAL(ByRef Rng As Range, Formula As String) As Variant
    Dim RngAddress As String
    RngAddress = "'" & Rng.Parent.Name & "'!" & Rng.Address(External:=False)
    EVAL = Evaluate(Replace(Formula, "$", RngAddress))
End Function

然后,您可以使用作为文本传递的公式轻松评估您的值($用于参数):

=EVAL(A1, "IF($<21,""error"",""no error"")")

(注意转义的双引号)。但您宁愿从另一个单元格传递公式 - 然后您可以使用单引号在单元格中指定公式:

IF($<21,"error","no error")
=EVAL(A1, B1)

答案 1 :(得分:0)

我个人会将check_desc!B2重命名为&#34; Check_1&#34; (命名范围)然后引用它。在重新命名列标题后,您也可以使用INDIRECT功能&#34; Check_1&#34;同样。 注意:这种情况下的值应为&#34; 18&#34;而不是&#34;年龄低于18岁和#34;您当然可以将数字格式更改为&#34;年龄低于&#34; 0 如果关系也发生了变化,我会插入一个表,当在一个单元格中更改时,每个单元格中的统一公式会发生变化。

您将面临的唯一问题是您桌子的非扩展性质。您可以使用VBA,但维护公式可以增加您的责任,即使不处理讨厌的嵌套函数会稍微容易一些。