在一系列单元格中使用公式

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

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

我试过的第一个脚本一直input公式直到最后一行的值:

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的前面添加extra =时才会发生。 错误出现在线上

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

这是编辑的脚本: –

 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 

您有一个格式不正确的IF函数和COUNTIF函数 。

 '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 

您正在使用activecell在第二个,所以它只会在活动单元格,如果没有select。 所以你需要改变你的循环

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

接着

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

然后

 rng.value=rng.value 

另外,在第二个,你不设置LastRow。