【问题标题】:VBA If Statement Formula in a Loop and Range Function to Get Cell ValueVBA If语句公式在循环和范围函数中获取单元格值
【发布时间】:2020-03-04 05:48:33
【问题描述】:

我正在尝试每隔 16 行将 If 公式分配给某个单元格。公式需要比较 J、K 和 L 列中单元格的值并给出通过或失败结果。

我在使这个 If 公式循环工作时遇到问题。请帮忙!我的代码如下。

首先我收到编译错误提示“预期语句结束”

其次,还有其他方法可以使这些工作吗?我需要在每 16 个单元格处将相同的公式应用于单元格 M5 到 M789。

For a = 5 To 789 Step 16

   Range("M" & a).FormulaR1C1 = "=IF(Range("J" & a)>= Range("K" & a),IF(Range("J" & a))<= Range("L" & a),""PASS"", ""FAIL""),""FAIL"")"

【问题讨论】:

  • 1) 你需要.Formula 而不是.FormulaR1C1。 2) 不要在公式中使用Range - 这会将 VBA 混合到常规工作表公式中。您不能在工作表中使用 Range(J5) - 只能使用 J5
  • 谢谢。除了 Range,我还能用什么来获取循环内 J5 到 J789、K5 到 K789 和 L5 到 L789 单元格的值?
  • 只需 "J""K""L" - 从公式部分删除 Range 调用。
  • Range("M" & a).Formula = "=IF(("J" & a)>=("K" & a),IF(("J" & a)
  • 如果您真的需要用公式填充这些单元格,也可以提出这个问题。它有什么目的。 JKL 列的值会改变吗?否则你在做不必要的计算。

标签: excel vba if-statement range


【解决方案1】:
  1. 您需要 .Formula 而不是 .FormulaR1C1 - 您没有使用 R1C1 引用。

  2. 从公式部分中删除 Range 调用。这是将 VBA 与常规工作表公式语法混合在一起。

  3. 您可以使用 AND 简化公式。在这种情况下,您根本不需要连接a。 Excel 足够聪明,可以更新相关引用。

Sub Test()
    Dim myFormula As String
    myFormula = "=IF(AND(J5>=K5,J5<=L5),""PASS"",""FAIL"")"

    Dim a As Long
    For a = 5 To 789 Step 16
        Range("M" & a).Formula = myFormula
    Next
End Sub

【讨论】:

  • 是的,更改为 .Formula 并删除 Range 有所帮助。谢谢大本。
猜你喜欢
  • 2019-06-05
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多