2014-09-02 91 views
1

特定細胞:K4和K8式自動填充向下多列,使用特定的細胞中VBA

柱的所需式數據:A(值命名DEVM),C(命名切片值)和d(值指定地點)

柱的公式中去:E,F和G(要命名這些值角度,devmm和高度)

式進入E1: =(D1 - 1)* $ķ$ 8

進入F1的公式: = A1 * 1000

公式進入G1: =(C1 - 1)* $ $ķ4

^^^這些僅僅是相對於第1行

我希望我的宏進入這些公式放入這些第1行單元格中,然後自動填充到最後一個活動行(我已經對代碼進行了排序)。我的代碼的相關部分如下。

K = 1 
ender = Tier * increment 
last = LastTier * increment 
starter = ender - (increment - 1) 
If starter = 0 Then 
    starter = 1 
End If 

sheetname1 = "Sheet1" 
ActiveSheet.Name = sheetname1 
ActiveSheet.Range("K2") = TankHeight 
ActiveSheet.Range("K3") = LastTier - 1 
ActiveSheet.Range("K4").Formula = "=$K$2/$K$3" 
ActiveSheet.Range("K6").Value = 360 
ActiveSheet.Range("K7") = increment 
ActiveSheet.Range("K8").Formula = "=$K$6/$K$7" 

' ******************************************************************** 
Set Range1 = Range("A1:J65536") 
With Range1 
    Rows(last + 2).Delete 
End With 

For K = starter To ender 
    Devm = ActiveSheet.Range("A" & K).Value 
    Rad = ActiveSheet.Range("B" & K).Value 
    slice = ActiveSheet.Range("C" & K).Value 
    point = ActiveSheet.Range("D" & K).Value 
    ' ***Automation settings for Formulas and Autofill down to last*** 
    ActiveSheet.Range("E1").Formula = "=(D1-1)*$K$8" 
    ActiveSheet.Range("F1").Formula = "=A1*1000" 
    ActiveSheet.Range("G1").Formula = "=(C1-1)*$K$4" 
    Angle = ActiveSheet.Range("E" & K).Value 
    Devmm = ActiveSheet.Range("F" & K).Value 
    height = ActiveSheet.Range("G" & K).Value 

    K = K + 1 

    ActiveSheet.Range("C1").Select 

Next 
+1

-1因爲你的問題是「我有X,我要Y」 – ApplePie 2014-09-02 11:07:32

回答

4

不需要循環。你可以在所有的細胞一氣呵成

Range("E1:E" & lastRow).Formula = "=(D1 - 1) * $K$8" 
Range("F1:F" & lastRow).Formula = "=A1 * 1000" 
Range("G1:G" & lastRow).Formula = "=(C1 - 1) * $K$4" 

其中lastRow是列在最後一行輸入公式。

您可以使用「Error in finding last used cell in VBA」找到。

+0

所以我真的不需要「對於K = ...」部分呢?我的整個宏有一個循環,但是在特定的消息框中是否單擊是/否會出現問題 – 2014-09-02 11:04:55

+0

哦,並且D1,A1等會根據行自動更改嗎? – 2014-09-02 11:05:36

+0

對於你不需要循環的公式:)它將使用正確的公式自動填充所有單元直到結束 – 2014-09-02 11:09:31

0

有幾個方法,你可以接近這一點,但以最小的改動你的代碼,我會使用R1C1符號爲您的公式和使用引用到k的每一行做到這一點:

ActiveSheet.Range("E" & k).FormulaR1C1 = "=(RC[-1]-1)*R8C11" 
ActiveSheet.Range("F" & k).FormulaR1C1 = "=RC[-5]*1000" 
ActiveSheet.Range("G" & k).FormulaR1C1 = "=(RC[-4]-1)*R4C11" 
0

沒有必要找到最後一行。這裏有一個更簡單的方法:

Selection.AutoFill Destination:= _ 
Range(Selection, ActiveCell.Offset(0, -1).End(xlDown).Offset(0, 1)) 

這個例子假定你是一列到右邊。

雙偏移是可能的 - 誰知道!