2014-09-02 4 views
1

специфические клетки: K4 и K8Формула автозаполнения вниз несколько столбцов, используя специфические клетки в VBA

Колонны с данными, необходимыми для формул: А (значения имени devm), C (значения имени ломтика) и D (значения имени точки)

Колонны с формулами, чтобы идти в: E, F и G (хочу называть эти значения угла, devmm и высота)

Формула для перехода в E1: = (D1 - 1) * $ K $ 8

Формула для перехода в F1: = A1 * 1000

Формула пойти в G1: = (С1 - 1) * $ K $ 4

^^^ Это только по отношению к ряду 1

Я хочу, чтобы мой макрос, чтобы войти эти формулы в эти ячейки Row 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

ответ

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

, так что мне действительно не нужна часть «For K = ...»? Есть петля со всем моим макросом, но это отключается, если нажать кнопку Да/Нет в определенном окне сообщения –

+0

О, и будет ли D1, A1 и т. Д. Автоматически изменяться в зависимости от строки? –

+0

Для формулы вам не нужно зацикливаться :) Она будет заполнять все ячейки автоматически правильной формулой до конца –

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)) 

В этом примере предполагается, что вы столбец справа.

Возможно двойное смещение - кто знал!

Смежные вопросы