2013-04-01 52 views
1

enter image description hereVBA的Excel公式为以下条件(循环引用)


嗨,我试图把一个公式一样ActiveCell.FormulaR1C1 = "=IF(RC[-1]=""India"",RC,"""")"如果国家不印度然后检查1,CHECK2和Check3应该是空的,否则他们应该显示自己的价值。当我试图把这个公式放在Excel中时,我给出了循环引用警告。我只是想要那个公式。任何帮助将不胜感激。

回答

0

当公式将自己的单元格直接或间接引用回自己的单元格时,它会创建一个循环引用。

ActiveCell.FormulaR1C1 = "=IF(RC[-1]=""India"",RC,"""")" 

你正在写在activecell公式和公式表示,如果RC [-1] = “印度” ,如果其真正RC是一样activecell。因此,您正在收到循环引用错误。

但是,如果你把这个公式在列E如下,它将工作。

Range("E2:E" & lastRow).FormulaR1C1 = "=IF(RC[-4]=""India"",RC[-3],"""")" 

另外下面是简单的VBA代码。

Sub sample() 
    Dim lastRow As Long 
    lastRow = Range("A65000").End(xlUp).Row 

    For i = 2 To lastRow 
     If (InStr(1, Cells(i, 1), "India") <= 0) Then 
      Range("B" & i & ":D" & i).Clear 
     End If 
    Next 
End Sub 
+0

@ Santhosh,RC在任何时候都会有一个默认值。如果RC [-1] =“印度”,那么它应该显示它自己的值,否则它应该显示为空。这是我的要求。 –

0

不能使用RC仅因为这是参考当前公式的结果。

选项1:你需要有另一种细胞是有效的细胞,egthe下面创建一个到当前单元格的左边一个单元格:评论后

ActiveCell.Offset(0,1).FormulaR1C1 = "=IF(RC[-2]=""India"",RC[-1],"""")" 

选项2:如果你的代码行,只是要清除当前细胞值,如果离开小区不印度然后使用此:

If ActiveCell.Offset(0,-1).Value <> "India" Then ActiveCell.Value = "" 

选项3:如果RC中的默认值必须保留,但如果RC [-1]的值变得不等于印度需要重写公式,则必须在公式中硬编码您的值所以:

ActiveCell.FormulaR1C1 = "=IF(RC[-1]=""India"",""" & ActiveCell.Value & ""","""")" 
+0

实际上,RC默认具有它自己的值。当我们在** TRUE **的情况下应用上述公式时,RC将采用第一个左侧单元格的值,但是在** FALSE **情况下,RC应该显示它的默认值。在你的公式中,你在其他情况下是空的。 –

+0

存储的默认值在哪里?或者你是否只想覆盖这个RC值,如果是真的? – glh

+0

我只想覆盖此RC值(如果为true)。我已经理解你的逻辑'如果ActiveCell.Offset(0,-1).Value <>“印度”然后ActiveCell.Value =“”'但我想这应该作为一个公式。感谢您的快速响应。 –