2016-03-07 101 views
-2

我想在我的宏中使用函數Sum(E2/(E2+F2)),然後自動填充此公式到我的表的最後一個填充行。我找到了一個自動填充子工具,它工作的很好,但它在整個列中填充了完全相同的值(使用正確的公式)。SUM函數在VBA導致相同的值被自動填充

下面是代碼:

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)中,然後自動填充到表格中的最後一個單元格,並顯示正確的值?我不知道爲什麼它顯示正確的公式時,我單擊單元格,但顯示錯誤的值。

回答

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")不解析,我猜你正在嘗試執行類似於我在設置目標範圍的行中所做的操作,但是如果嘗試運行代碼,這也會導致錯誤。
  • 您在代碼中自由使用Select,ActiveCell等。不是在自己的錯誤,但bad practice,如果你不小心,很可能導致錯誤。當你剛剛開始學習VBA時,你應該養成明確聲明你的工作範圍的習慣。

宏上述發現給出,其中我在B3把一個值的片材下面的結果(即,從G2製備下式自動填充至G3):

enter image description here

,你可以請參閱,單元格引用按預期遞增。

+0

嘿謝謝你的回覆!我發現了一個解決方法,可能不如你的,但嘿它的作品!我無法找到一種方法將它粘貼在這裏,看起來很糟糕......長話短說我用一個循環遍歷每個單元格。我也會嘗試你的方法,看看它是否更好。再次感謝你。 – Njt07

+0

剛剛嘗試了上面的腳本,它仍然使每個單元格具有相同的值。謝謝你的迴應,但我會堅持細胞循環。由於我沒有處理大量的數據,所以處理時間可以忽略不計。 – Njt07

-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幫助,雖然我最終將使用此代碼。