【问题标题】:VBA not inputting Excel formulaVBA不输入Excel公式
【发布时间】:2015-06-03 09:22:06
【问题描述】:

在过去的几个小时里,我一直被困在这个问题上,这让我发疯了。我正在尝试在单元格 B2 中输入此公式:

=IF(OR(C2="Yes",D2="Yes",E2="Yes",F2="Yes",G2="Yes",H2="Yes",I2="Yes"),"Yes",IF(AND(C2="No",D2="No",E2="No",F2="No",G2="No",H2="No",I2="No"),"No"))

公式工作正常,但通过 VBA 宏运行时没有公式输入到单元格中。

我录制了宏,复制并粘贴了输出,但单元格仍然是空白的。这是录音的输出:

Range("B2").Select
ActiveCell.FormulaR1C1 = _
    "=IF(OR(RC[1]=""Yes"",RC[2]=""Yes"",RC[3]=""Yes"",RC[4]=""Yes"",RC[5]=""Yes"",RC[6]=""Yes"",RC[7]=""Yes""),""Yes"",IF(AND(RC[1]=""No"",RC[2]=""No"",RC[3]=""No"",RC[4]=""No"",RC[5]=""No"",RC[6]=""No"",RC[7]=""No""),""No""))"

我也试过 Range("B2").Formula,没有成功。

有什么建议吗?谢谢!

【问题讨论】:

  • 仅供参考,您的 IF 语句真的很长,您可以删除语句的第二部分,因为结果将是相同的 =IF(OR(C2="Yes",D2="Yes",E2="Yes",F2="Yes",G2="Yes",H2="Yes",I2="Yes"),"Yes","No") 只是使您的公式更小,以便于调试。当然,除非您想在最后一个 NO 之后添加另一个条件。因此,公式读取如果任何单元格为“是”则返回Yes,否则如果所有单元格为“否”则返回“否”。 (可以使用此评论中包含的缩短公式来实现)
  • 当您说“单元格保持空白”时,您的意思是在您的代码运行后单元格中没有公式,或者该公式存在但它正在评估为(空白)值?
  • @izzymo 太好了,感谢您的提示。刚刚试了一下,结果是一样的!
  • @FreeMan 代码运行后单元格中没有公式。在 Excel 中手动输入时效果很好。我相信问题在于脚本的语法。我认为这与引号有关。
  • 发现问题的家伙!这不是公式/代码。我试图将一个单元格向左移动,向下移动到包含值的列中的最后一个单元格,向右移动,一直选择使用公式 (B2) 的单元格,然后向下填充。显然它没有一直向上select,它只是移到了那里。 B1是空的,所以它把它填满了。应该调试得更好。我当时累死了。谢谢大家的帮助。

标签: vba excel


【解决方案1】:

如果引用的所有单元格都是空白的,您应该得到一个“错误”的结果。

你的 if 以 (OR(C2="是",D2="是",E2="是",F2="是",G2="是",H2="是",I2="是") 如果其中任何一个 = Yes,则返回 Yes

但是,它们是空白的,所以继续执行此操作 IF(AND(C2="No",D2="No",E2="No",F2="No",G2="No",H2="No",I2="No"),"No" )

它们仍然是空白的,并给出 FALSE - 如果您说所有单元格必须为“否”,则返回“否”

您可以在您正在使用的单元格周围发布数据吗?

【讨论】:

  • 问题不在于公式本身(它在 Excel 中运行良好),而是 VBA 代码:Range("B2").Select ActiveCell.FormulaR1C1 = _ "=IF(OR(RC[1]=""Yes"",RC[2]=""Yes"",RC[3]=""Yes"",RC[4]=""Yes"",RC[5]=""Yes"",RC[6]=""Yes"",RC[7]=""Yes""),""Yes"",IF(AND(RC[1]=""No"",RC[2]=""No"",RC[3]=""No"",RC[4]=""No"",RC[5]=""No"",RC[6]=""No"",RC[7]=""No""),""No""))" 出于某种原因,它没有输入到单元格中。这是数据:link
【解决方案2】:

您也可以使用这个公式 - 计算有多少是“是”,有多少是“否”。

=IF(COUNTIF($C$1:$I$1,"Yes")>=1,"Yes",IF(COUNTIF($C$1:$I$1,"No")=7,"No"))

如果有空白,或者不是 Yes 或 No 的值,您仍然会遇到问题。

如果 5 说 'Yes' 并且 1 说 'Bob' 它将返回 'Yes',但是如果 6 说 'No' 并且 1 说 'Bob' 它将返回 FALSE。

你需要说明如果第二部分不是 TRUE 会发生什么:

=IF(OR(C2="Yes",D2="Yes",E2="Yes",F2="Yes",G2="Yes",H2="Yes",I2="Yes"),"Yes",IF(AND(C2="No",D2="No",E2="No",F2="No",G2="No",H2="No",I2="No"),"No",**"Neither Yes or No"**))

=IF(COUNTIF($C$1:$I$1,"Yes")>=1,"Yes",IF(COUNTIF($C$1:$I$1,"No")=7,"No","**Neither Yes or No**"))

或者正如@izzymo 所说——如果至少有一个是,则返回是,否则返回否:

=IF(COUNTIF($C$1:$I$1,"Yes")>=1,"Yes","No")

【讨论】:

  • 这是一个有趣的公式替代方法。但是,我应该更好地解释这个问题。该公式在 Excel 中手动输入时工作正常,但通过宏运行时没有任何反应。因此,根据@izzymo,缩短的 VBA 代码将是:ActiveCell.FormulaR1C1 = _"=IF(OR(RC[1]=""Yes"",RC[2]=""Yes"",RC[3]=""Yes"",RC[4]=""Yes"",RC[5]=""Yes"",RC[6]=""Yes"",RC[7]=""Yes""),""Yes"",""No""))"
【解决方案3】:

IF 语句包含 3 个部分:

  • 条件
  • “如果为真”
  • “如果为假”。

您的第一个语句包含所有三个:

  • 如果(一堆单元格中的任何一个为“是”)
  • '是'
  • 另一个IF声明*

问题出在“另一个IF 声明”中,您有:

  • 如果(一堆单元格为“否”)
  • '否'
  • 没什么...

IF(AND(C2="No",D2="No",E2="No",F2="No",G2="No",H2="No",I2="No"),"No", ???put a false condition here???)

* 或者,您可以按照评论中的izzymo 建议,将“另一个IF 语句”替换为“否”,并得到相同的结果

【讨论】:

  • 第三个参数是可选的。
  • 这很有趣。我刚刚查看了 MS 文档,您是对的,但是当我将其排除在 Excel 2007 和 2010 之外时,我总是收到“您的公式有错误”错误...
  • 您的错误可能来自其他原因。在 Excel 2007 中,=IF(FALSE,TRUE)(无第三个参数)返回 FALSE,我经常使用的更复杂的公式也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
相关资源
最近更新 更多