2014-05-05 79 views
0

我正在执行条件语句,并且已使用VBA自动化电子表格。一切工作正常,直到涉及到这一个公式。我猜测它与文本字符串有关。我曾尝试使用& Chr(34)&之前和之后,它也无法正常工作。公式不在VBA中工作,但在单元格中工作

这里的公式:
=IF(E2="RIA Review",IF(G2<=4,"Green",IF(G2=5,"Yellow","Red")), IF(E2="Delivery",IF(I2<=-7,"Green",IF(I2=-1,"Yellow","Red")),IF(E2="Launch/Close",IF(I2>=121,"Red",IF(I2>=111,"Yellow",IF(I2> =100,"Green","N/A"))),IF(OR(E2="Intent",E2="AE Review",E2="Initial Review",E2="AE Disposition"),IF(G2<=8,"Green",IF(OR(G2=9,G2=10)," Yellow",IF(G2>=11,"Red")))))))

下面是VBA代码(它改变了单元格引用,我仍然有一个很难知道它是否在谈论右边的单元格)

Range("H2").Select 
ActiveCell.FormulaR1C1 = _ 
"=IF(RC[-3]=""RIA Review"",IF(RC[-1]<=4,""Green"",IF(RC[-1]=5,""Yellow"",""Red"")),IF(RC[-3]=""Delivery"",IF(RC[1]<=-7,""Green"",IF(RC[1]=-1,""Yellow"",""Red"")),IF(RC[-3]=""Launch/Close"",IF(RC[1]>=121,""Red"",IF(RC[1]>=111,""Yellow"",IF(RC[1]>=100,""Green"",""N/A""))),IF(OR(RC[-3]=""Intent"",RC[-3]=""AE Review"",RC[-3]=""Initial Review"",RC[-3]=""AE Disposition"")," & _ 
"]<=8,""Green"",IF(OR(RC[-1]=9,RC[-1]=10),""Yellow"",IF(RC[-1]>=11,""Red"")))))))" 

任何帮助将是伟大的!

+1

1)一些错误这里:' “] <= 8”, “绿色”,“'2)'ActiveCell.FormulaR1C1'接受长度小于255个字符长 –

+3

ughghghghg我讨厌这些嵌套公式的公式。而不是建立一个宏来做这样一个丑陋的公式操作,为什么不建立一个宏来执行所需的验证呢?实时更新可以通过工作表的'Change'事件来处理...... –

+0

而不是粗鲁的大卫·泽曼斯 - 为什么没有帮助?你是否曾经认为我是初学者,并且不知道你在说什么?难以让丑陋的嵌套公式发挥作用,但我很自豪,我想到了这一点。我只用了大约3个月的excel和VBA,没有预先的编码经验。下次休息呃真正的帮助,而不仅仅是对寻求帮助的人有意义。 – Krrrcko

回答

0

从我可以在决策的公式应该明白,在颜色将取决于3列:ê

使用最少的编码,您可以使用该3范围输入创建一个用户定义的功能,因此它们中的任何一个都会自动更新颜色。

将公式放入单元格中,颜色类似于=ColorStatus(E2,G2,I2)以及代码。我还会列举不属于您的任何检查的E列,并且条件略有不同,但结果相同(假设值中没有小数)。

更新了来自评论的“递送”的颜色决定。

Function ColorStatus(E As Range, G As Range, I As Range) As String 
    Dim sColor As String 

    Select Case E.Value 
     Case "RIA Review" 
      ' Color determined by column G 
      Select Case G.Value 
       Case Is < 5: sColor = "Green" 
       Case 5:   sColor = "Yellow" 
       Case Else:  sColor = "Red" 
      End Select 
     Case "Delivery" 
      ' Color determined by column I 
      Select Case I.Value 
       Case Is < -6: sColor = "Green" 
       Case -1 To -6: sColor = "Yellow" 
       Case 0 To 99: sColor = "Red" 
       Case Else:  sColor = "Black" ' From 100 days 
      End Select 
     Case "Launch/Close" 
      ' Color determined by column I 
      Select Case I.Value 
       Case Is > 120: sColor = "Red" 
       Case Is > 110: sColor = "Yellow" 
       Case Is > 99: sColor = "Green" 
       Case Else:  sColor = "N/A" 
      End Select 
     Case "Intent", "AE Review", "Initial Review", "AE Disposition" 
      ' Color determined by column G 
      Select Case G.Value 
       Case Is < 9: sColor = "Green" 
       Case 9, 10:  sColor = "Yellow" 
       Case Else:  sColor = "Red" 
      End Select 
     Case Else 
      sColor = "Unknown State" ' Or change to "" to appear blank 
    End Select 
    ColorStatus = sColor 
End Function 
+0

谢谢帕特里克!我会在今天测试一下,看看我能否得到它的工作。交付是棘手的。如果它比第一栏的日期早7天,那么它就是绿色。日期前1-6天是黄色。如果它已经过了日期,那么它是红色的。还有一个条件没有说明,就是说如果它是过去的100天,那么它就是黑色。 – Krrrcko

+0

@ user3605729欢迎,您可能希望共享这些列标题,因为我们不知道它们的用途和存储的数据类型。我假设只有整数,如果不是文本。对于** Delivery **,只需从1个方向(最小或最大)添加更多的案例。 – PatricK

+0

E列用于过程阶段。 G列是使用网络日的公式的整数,今天从不同的列中获取日期以计算它在该过程阶段中的日期。第I列也是一个完整的数字,与G相同,但使用不同的日期来确定什么时候启动以及是否有启动。 – Krrrcko

相关问题