2016-03-15 62 views
1

我想在单元格区域中使用公式,但是我在该单元格中获取公式,而不是公式的结果。在一系列单元格中使用公式

我尝试了几种不同的方法。

我尝试的第一个脚本中输入公式一路下跌的柱子,直到最后一行值: -

Dim LastRow As Long 
LastRow = Cells(Rows.Count, 5).End(xlUp).Row 
Range("DO22:DO" & LastRow).Formula = "IF=COUNTIF(AS22:AU" & LastRow & " ,""=Major Variance"")>0,""Major Variance"",IF(COUNTIF(AS22:AU" & LastRow & " ,""=Minor Variance"")>0,""Minor Variance"",""On Track""))" 

这是我试过的其他脚本,但是,这把公式只在第一排范围: -

Dim LastRow As Long 
Dim Rng As Range 
Range("DO22:DO" & LastRow).Select 
For Each Rng In Range("DO22:DO" & LastRow) 
    ActiveCell.Formula = "IF=COUNTIF(AS22:AU" & LastRow & " ,""=Major Variance"")>0,""Major Variance"",IF(COUNTIF(AS22:AU" & LastRow & " ,""=Minor Variance"")>0,""Minor Variance"",""On Track""))" 
Next Rng 

编辑1

我已经做了更改代码按别人的答案,但现在我得到一个运行时错误“应用程序定义或对象定义的错误。

它似乎只发生在我加入额外= If前面。所以它只会在活动单元格。如果不选择

Dim Rng As Range 
Dim LastRow As Long 

LastRow = Cells(Rows.Count, 5).End(xlUp).Row 

Range("DO22:DO" & LastRow).Select 
For Each Rng In Range("DO22:DO" & LastRow).Cells 
    Rng.Formula = "=IF=COUNTIF(AS22:AU" & LastRow & " ,""=Major Variance"")>0,""Major Variance"",IF(COUNTIF(AS22:AU" & LastRow & " ,""=Minor Variance"")>0,""Minor Variance"",""On Track""))" 
    Rng.Value = Rng.Value 
Next Rng 
+0

公式必须开始** = **标志 –

+0

这是为什么你正在写的同一个公式每个单元不清楚。 – Jeeped

回答

0

您有一个格式错误的IF functionCOUNTIF function

'target formula "=IF(COUNTIF(AS22:AU99, "Major Variance"), "Major Variance", =IF(COUNTIF(AS22:AU99, "Minor Variance"), "Minor Variance", "On Track")) 
rng.Formula = "=IF(COUNTIF(AS22:AU" & lastRow & ", ""Major Variance""), ""Major Variance"", " & _ 
       "IF(COUNTIF(AS22:AU" & lastRow & ", ""Minor Variance""), ""Minor Variance"", " & _ 
       """On Track""))" 
rng = rng.Value 

请注意,如果同时存在主方差和次方差,则主要差异优先。

要将此公式放入每一行并在循环中每次修改该行,代码将如下所示。

Dim lastRow As Long, rng As Range 

With Worksheets("Sheet1")  '<~~ you should know what worksheet you are on! 
    lastRow = .Cells(Rows.Count, 5).End(xlUp).Row 
    For Each rng In .Range("DO22:DO" & lastRow) 
     rng.Formula = "=IF(COUNTIF(AS" & rng.Row & ":AU" & rng.Row & ", ""Major Variance""), ""Major Variance"", " & _ 
         "IF(COUNTIF(AS" & rng.Row & ":AU" & rng.Row & ", ""Minor Variance""), ""Minor Variance"", " & _ 
         """On Track""))" 
     rng.Value = rng.Value 
    Next rng 
End With 

但是,您也可以将公式一次放入所有单元格中,就像这样。

Dim lastRow As Long 

With Worksheets("Sheet1")  '<~~ you should know what worksheet you are on! 
    lastRow = .Cells(Rows.Count, 5).End(xlUp).Row 
    With .Range("DO22:DO" & lastRow) 
     .Formula = "=IF(COUNTIF(AS22:AU22, ""Major Variance""), ""Major Variance"", " & _ 
         "IF(COUNTIF(AS22:AU22, ""Minor Variance""), ""Minor Variance"", " & _ 
         """On Track""))" 
     .Value = .Value 
    End With 
End With 
+0

,这是现在的一些工作,但它在列的下方一直输入相同的值。我想要的是再次检查每一行if语句在DO列中输入结果,然后移动到下一行。 – user3088476

+0

是的。我在对原始问题的评论中提到,你似乎在每个单元格中都写入了相同的公式,但是不清楚你希望**做什么。您可能想要将每个新行作为仅用于该行的countif,或者可以逐行累积。到目前为止你所尝试的并不清楚。 – Jeeped

+0

我正在尝试使用if语句来获取行的总体值。我有三列,需要获得每行的总体价值。每行执行if语句的麻烦在于,每次需要运行脚本时,最后一行的编号都会更改,而且它可能长达200行。我有没有更好的解释,我可以添加一个例子,如果它有帮助 – user3088476

0

你是在第二一个使用activecell - :上线

Rng.Formula = "=IF=COUNTIF(AS22:AU" & LastRow & " ,""=Major Variance"")>0,""Major Variance"",IF(COUNTIF(AS22:AU" & LastRow & " ,""=Minor Variance"")>0,""Minor Variance"",""On Track""))" 

这里出现错误编辑的脚本。所以你需要改变你的循环是

For Each Rng In Range("DO22:DO" & LastRow).cells 

然后

rng.Formula = "=IF=COUNTIF(AS22:AU" & LastRow & " ,""=Major Variance"").... 

然后

rng.value=rng.value 

此外,在二日一,你不是设置LASTROW。

+0

我已经对脚本进行了这些更改,请参阅问题中的修改。我现在得到了一个运行时错误 – user3088476

相关问题