首页 > 解决方案 > 实施我的公式以自动化报告

问题描述

我一直试图让我的公式在我的宏中工作,但它没有。我正在尝试自动化一个报告,我创建了一个插入列的宏。我为手动用于生成报告的公式创建了另一个宏。我注意到我使用的公式(索引和匹配等)是 CSE,我必须按下 control、shift 和 enter 才能工作。现在我在宏中得到了它,结果就是整个公式字符串。另外,我需要从列的第二个单元格直到最后一行来实现我的公式。我尝试使用最后一行函数,但我认为它不起作用,因为该函数不起作用。我将附上我的代码图片以供参考,因为它可能是一个更好的解释。

    Sub InsertColumns()

    Columns("Q:S").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("Q1").Value = "SLA (Derived)"
    Range("R1").Value = "Due Date Derived"
    Range("S1").Value = "SLA Remaining Days Derived"

    Columns("U:V").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("U1").Value = "Due Date After Reset SLA Applied"
    Range("V1").Value = "Past Due (Y/N)"

    Columns("X:X").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        Range("X1").Value = "Interim Reset SLA"

    End Sub
    Sub Past_Due_Report()
      '
    ' Past_Due_Report Macro
     '
     '     Keyboard Shortcut: Ctrl+p
     '
       ActiveWindow.SmallScroll Down:=-9
      Range("Q2").Select
      ActiveCell.FormulaR1C1 = _
        "=INDEX('Initial SLA'!R1C1:R256C6,MATCH(RC[-4]&RC[-3],'Initial SLA'!R1C1:R256C1&'Initial 
        SLA'!R1C2:R256C2,0),6)"
     Range("R2").Select
     ActiveCell.FormulaR1C1 = "=RC[-12]+RC[-1]"
     Range("S2").Select
     ActiveCell.FormulaR1C1 = "=[@[Due Date Derived]]-TODAY()"
     Range("U2").Select
     ActiveCell.FormulaR1C1 = "=[@[Past Due (Y/N)]]"
     Range("V2").Select
     ActiveCell.FormulaR1C1 = 
        "=IF([@[Due Date After Reset SLA Applied]]<TODAY(),1,0)"
     Range("V3").Select
     End Sub

标签: excelvbaexcel-formula

解决方案


如果需要添加 CSE 公式,可能是公式数组,可以使用 .FormulaArray 代替 .FormulaR1C1:

ActiveCell.FormulaArray = "=INDEX('Initial SLA'!R1C1:R256C6,MATCH(RC[-4]&RC[-3],'Initial SLA'!R1C1:R256C1&'Initial SLA'!R1C2:R256C2,0),6)"

您可以像这样改进您的代码:

With Range("Q2")
      .FormulaArray = "=INDEX('Initial SLA'!R1C1:R256C6,MATCH(RC[-4]&RC[-3],'Initial SLA'!R1C1:R256C1&'Initial SLA'!R1C2:R256C2,0),6)"
     .Offset(0,1).FormulaR1C1 = "=RC[-12]+RC[-1]"
     .Offset(0,1).FormulaR1C1 = "=[@[Due Date Derived]]-TODAY()"
     .Offset(0,2).FormulaR1C1 = "=[@[Past Due (Y/N)]]"
     .Offset(0,1).FormulaR1C1 = "=IF([@[Due Date After Reset SLA Applied]]<TODAY(),1,0)"

End With

推荐阅读