我想在Excel中使用Excel中的EVALUATE-Function来表示if语句。
我遇到了以下问题:我想使用Excel来验证我的数据。我有三张纸:
现在,如果我有例如check_1“如果(年龄<18岁,”错误“,”没有错误“)”和客户数据10和20,那么第一个客户的检查应该开始检查对于第二个不应该。 如果数据被更改,并且年龄设置为10到18,那么一切都应该没问题,或者如果规则更改为“If(年龄<21,”错误“,”没有错误“)”那么新条件应该应用于所有数据。
这样的事情可能吗? 使用evaluate函数,只有“简单”的公式可以工作。
提前致谢, 马丁
附上你可以找到 Excel-Sample File
答案 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,但维护公式可以增加您的责任,即使不处理讨厌的嵌套函数会稍微容易一些。