【问题标题】:Excel - Convert String with if condition to a formulaExcel - 将带有if条件的字符串转换为公式
【发布时间】:2015-03-03 20:26:50
【问题描述】:

我想将 Excel 中的 EVALUATE-Function 之类的东西用于 if 语句。

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

  1. 我想检查的真实数据。每行代表一个客户,每列代表一些数据。这些列具有特定的名称,例如“年龄”、“名称”……
  2. 我要执行的检查的描述。每行代表一张支票,我有 3 列: 1 check_id - 每张支票的标识符; 2 check_desc – 一个普通人都能看懂的检查描述,比如“Age below 18”; 3 规则 – Excel 公式作为字符串,如 If(age
  3. 表 1 和 2 应该放在一起的地方。每行应代表一位客户,每列应代表一张支票。

现在,如果我有例如 check_1 “If(age

这样的事情可能吗? 使用评估函数,只有“简单”的公式才有效。

提前致谢, 马丁

附上你可以找到 Excel-Sample File

【问题讨论】:

  • 不清楚您要达到什么目的,只需制作 1 张纸并有 1 列用于检查,同一函数中的 3 个 if 表示行中的错误,

标签: excel excel-formula vba


【解决方案1】:

您肯定需要一些 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)

【讨论】:

  • 感谢您的提示。但是,如果我有多个变量,我该怎么办?
  • 如果单变量的这种方法适合您,我可以修改它以处理多个变量。
  • 我的目标是将条件写成文本,以便所有人都能阅读和理解。这就是为什么我更喜欢使用像年龄这样的命名范围。如果我能写成一个年龄10, age
【解决方案2】:

我个人会将 check_desc!B2 重命名为“Check_1”(命名范围),然后参考它。将列标题重命名为“Check_1”后,您也可以使用 INDIRECT 函数。 注意:本例中的值应为“18”而不是“18 岁以下”。您当然可以将数字格式更改为 "age below "0
如果关系也在发生变化,我将插入一个表格,当在一个单元格中更改时,该表格将在每个单元格中更改统一的公式。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多