我正在Excel中构建一个宏,以针对一组数据运行规则,并输出每行是否通过规则。我希望能够在不改变宏的情况下添加,删除或更改规则。因此,我有一个DATA工作表和一个RULES工作表,宏生成OUTPUT工作表,然后填充它。
设置RULES,以便在不同的行上枚举每个不同的规则。为了实现这一点,我需要能够在RULES中输入与规则相关的实际VBA代码,然后我需要让宏查看RULES上的那一列并执行单元格中的代码。
我的设置的简化示例 -
我将使用伪代码来表示公式,以消除迄今为止解释宏的一些无关细节的必要性。 RULES.Formula应该包含一行VBA代码 -
If CurrentDATARow.Dividend1 = Empty Then
CurrentDATARow.Dividend2 / CurrentDATARow.Divisor
Else
CurrentDATARow.Dividend1 / CurrentDATARow.Divisor
End If
所以,所有这些解释只是为了给出这个问题的上下文:我可以在宏的VBA中做些什么来使它读取RULES.Formula的内容并使其与其余内容一起执行该代码宏?
答案 0 :(得分:3)
如果你有(说)
IF({dividend1}="",{dividend2}/{divisor},{dividend1}/{divisor})
存储在“规则”单元格中(注意不包括“=”),您可以使用Replace()
将占位符替换为您正在检查的行中每个单元格的相关单元格地址。
然后使用类似
的内容Dim val
val=Sheet1.Evaluate(yourformulastring) 'evaluate vs. specific worksheet
If Not IsError(val) Then
'check against thresholds etc
End If
如果评估导致错误,您可以使用IsError(val)进行测试,否则它将返回公式的结果,您可以针对“阈值”值单元格进行测试。如果在阈值单元格上设置背景颜色,则可以根据超出的阈值为每一行着色。
注意没有工作表限定符,Evaluate
将根据ActiveSheet计算公式,因此如果不使用限定符,请确保在运行此表时处于活动状态。
答案 1 :(得分:1)
您可以将测试/规则存储为命名范围内的Excel工作表公式。然后你只需从细胞中调用它们。
如果你给我们一些示例数据和计算或规则的类型,我可以举几个例子。