显示IF公式而不是结果

时间:2017-05-20 12:14:56

标签: excel vba excel-vba excel-formula

当Excel为我的宏执行某些VBA代码时,我在获取正确结果方面遇到了一些麻烦。

不是将公式放在所需的单元格中,而是给出了该公式的结果,在这种情况下为TRUE或FALSE。

此代码工作正常,它将公式放在单元格中,结果显示为:

Range("AL12").Select
ActiveCell.Formula = "=SUM" & ActiveCell.Formula

此代码不起作用,我收到错误:

Range("AL12").Select
ActiveCell.Formula = "=IF" & ActiveCell.Formula

这段代码有效,但它没有给出公式,只有结果:

Range("AL12").Select
ActiveCell.Formula = "" = "IF" & ActiveCell.Formula

Range("AL12").Select
ActiveCell.Value= "" = "IF" & ActiveCell.Value

如何让宏将公式放入单元格中,以便公式可以计算出结果,该结果应为0或1而不是TRUE或FALSE。与第一行代码完全一样吗?

3 个答案:

答案 0 :(得分:0)

ActiveCell.Formula = "" = "IF" & ActiveCell.Formula

ActiveCell.Formula = "" = "IF" & ActiveCell.Value

没有。这些不是“工作,而是将结果而不是公式”。他们只是将FALSE写入单元格。因为例如第一个语句意味着:

ActiveCell.Formula = (  "" = ("IF" & ActiveCell.Formula)  )

其中RHS是一个明显产生False的比较。

至于OP中的其他形式,即

ActiveCell.Formula = "=SUM" & ActiveCell.Formula

您只是将"=SUM"添加到现有公式中,或者在旧单元格为空时没有任何内容;在任何情况下,结果公式都有错误的语法。

答案 1 :(得分:0)

如果activecell中已有公式并且您希望使用 VBA 修改或增强该公式,则必须注意前导 = < /强>

假设我们有一个包含以下内容的单元格:

=SUM(A1:A123)

我们跑:

Sub Vig()
    Dim s As String
    s = ActiveCell.Formula
    MsgBox s
End Sub

我们得到:

enter image description here

如果我们想将其嵌入 IF 语句中,我们可以使用以下内容:

Sub Vig_2()
    Dim s As String
    s = Mid(ActiveCell.Formula, 2)
    ActiveCell.Formula = "=IF(" & s & "=0,9999," & s & ")"
End Sub

enter image description here

MID() 删除原始 =

答案 2 :(得分:0)

这永远不会顺利进行。它在您设计的系统中内置了太多不稳定性。正确的方法是获取每个数据并将其写入某处,并且在您将所有数据安全地写下来之前不要开始进行任何计算。

您可以写入工作簿单元格。这些可以在您想要结果的同一工作表中,在可见或隐藏的列中,或在另一个可见或隐藏或非常隐藏的工作表上(意味着用户无法在没有VBA帮助的情况下使其显示)。你也可以&#34;写&#34;进入记忆,意味着将值分配给变量。

同样的方法也应该应用于参数。例如,网址不应该在公式中。它应该在单元格中或在代码中声明的常量中。事实上,你应该学习观察的第一条规则之一就是不要将任何常数写入任何公式。公式操纵数据。他们没有包含它们。

在修改结构时,我还建议您检查VBA和工作表函数之间的关系。 VBA应该用于编写函数的情况相当罕见。通常,VBA不是用作功能的补充,而是用作替代品。工作表功能并不意味着要做非常复杂的工作,就像你试图让他们做的那样。由此产生的代码令人费解,最终无法解决问题(就像您目前的经验一样)。把所有这些都放到VBA中,花费数周和数周的时间来达成妥协将花费你几个小时才能达到完美。