VBA中的SUM函数导致自动填充相同的值

时间:2016-03-07 08:59:05

标签: excel-vba vba excel

我正在尝试在我的宏中使用函数Sum(E2/(E2+F2)),然后将此公式自动填充到我表的最后一行。我找到了一个自动填充子,它运行良好,但它在整个列中填充完全相同的值(使用正确的公式)。

以下是代码:

Range("G2").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-2]/(RC[-1]+RC[-2]))"

Selection.Paste Destination:=Range("G2:G" & Cells Rows.Count, "B").End  (xlUp).Row)

Columns("G:G").EntireColumn.NumberFormat = "0%"

我试图使用实际功能(而不是R1C1),但这也不起作用。

如何使用VBA将此公式放入单元格(G2)中,然后将其自动填充到表格中的最后一个单元格,并显示正确的值?我无法弄清楚为什么当我点击单元格但显示错误的值时它显示正确的公式。

2 个答案:

答案 0 :(得分:0)

您正在进行自动填充,您正在复制。要自动填充,请使用自动填充功能:

Option Explicit

Sub test()
  Dim destRange As Range

  With ThisWorkbook.Worksheets("Sheet1")
    .Range("G2").Formula = "=Sum(E2/(E2+F2))"
    Set destRange = .Range("G2:G" & .Range("B" & .Rows.Count).End(xlUp).Row)
    .Range("G2").AutoFill Destination:=destRange
  End With
End Sub

您的代码中还有一些其他错误,其中一些可能不在原始宏中,但您仍应避免在此处发布:

  • Range("G2").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-2]/(RC[-1]+RC[-2]))"是同一行中的两行代码,如果这也是您在宏中的编写方式,我无法想象您的代码是否正在运行。
  • Range("G2:G" & Cells Rows.Count, "B")没有解析,我猜你正在尝试做我在设置目标范围的行中做的事情,但如果你试图运行它,这也会导致错误代码。
  • 您正在代码中自由使用SelectActiveCell等。不是自己的错误,而是bad practice,如果你不小心,很可能会导致错误。当你刚开始学习VBA时,你应养成明确宣布你工作范围的习惯。

上面找到的宏在一张表格中给出了以下结果,其中我在B3中放置了一个值(即使公式自动填充从G2到G3):

enter image description here

如您所见,单元格引用按预期递增。

答案 1 :(得分:-2)

好吧我明白了!

我用过这个

        Range("G2").Select
        Do Until IsEmpty(ActiveCell.Offset(, -1))

            ActiveCell.FormulaR1C1 = "=SUM(RC[-2]/(RC[-1]+RC[-2]))"
            ActiveCell.Offset(1, 0).Select
        Loop

感谢ericdaude的帮助,尽管我最终将使用此代码。