2014-01-06 2 views
0

Как вы разрешаете вставляемую через VBA тему форума, чтобы адаптироваться к нумерации строк (т.е. формула, вставленная в строку 50000 с использованием кода ниже, станет GCDnm (D5000, E5000) вместо из GCDnm (D6, E6)?Разрешающая формула, вставленная через VBA для адаптации к нумерации строк

колонка B является основной столбец, где добавляется информация непрерывно. колонка J и к все заполнены формулами из приведенного ниже кода.

Sub macro2() 


Dim lastrow, lastrowJ, lastrowK As Long 


lastrow = Cells(Rows.Count, "B").End(xlUp).Row 
lastrowJ = Cells(Rows.Count, "J").End(xlUp).Row 
lastrowK = Cells(Rows.Count, "K").End(xlUp).Row 

Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(D6,E6)" 
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)" 

End Sub 

Так вместо этого, я бы как это должно быть примерно

Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(Dcurrentrow,Ecurrentrow)" 
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)" 

для текущей строки - это строка, в которую вставлена ​​формула.

+0

Вместо того, чтобы добавлять формулу один за другим, поскольку значения добавляются в B динамически, просто определите новый диапазон, чтобы заполнить формулу и повторно применить ее. См. Мое сообщение для простого объяснения. – L42

ответ

3

Первый подход, заключается в использовании Resize:

Range("J" & lastrowJ + 1).Resize(lastrow - lastrowJ - 1).Formula = _ 
    "=GCDnm(D" & lastrowJ + 1 & ",E" & lastrowJ + 1 & ")" 
Range("K" & lastrowK + 1).Resize(lastrow - lastrowK - 1).Formula = _ 
    "=LOOKUP(D" & lastrowK + 1 & ",...)" 

вместо

Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(D6,E6)" 
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)" 

Следующая подход заключается в использовании автозаполнения (вам необходимо установить формулы только в строках lastrowJ + 1 для столбца J и lastrowK + 1 для колонны K, и растянуть их):

Range("J" & lastrowJ + 1).Formula = _ 
    "=GCDnm(D" & lastrowJ + 1 & ",E" & lastrowJ + 1 & ")" 
Range("K" & lastrowK + 1).Formula = _ 
    "=LOOKUP(D" & lastrowK + 1 & ",...)" 

Range("J" & lastrowJ + 1).AutoFill _ 
    Destination:=Range("J" & lastrowJ + 1 & ":J" & lastrow), Type:=xlFillDefault 
Range("K" & lastrowK + 1).AutoFill _ 
    Destination:=Range("K" & lastrowK + 1 & ":K" & lastrow), Type:=xlFillDefault 

Или другим способом. Если вы знаете, что у вас есть относительные формулы (без знака $) в J6 и K6 (в примере =GCDnm(D6,E6)), чем вы можете использовать этот подход:

Range("J6").Copy 
Range("J" & lastrowJ + 1 & ":J" & lastrow).PasteSpecial xlPasteFormulas 

Range("K6").Copy 
Range("K" & lastrowK + 1 & ":K" & lastrow).PasteSpecial xlPasteFormulas 

Application.CutCopyMode = False 
0

Это происходит автоматически в VBA. Например, вы хотите ввести формулу в колонке с с суммой а и Ь, как это:

Range("C1").Formula = "A1+B1" 

И значения в А и В является динамическим, так что вы получите последнюю строку.

lrow = Cells(Rows.Count, "A").End(xlUp).Row 
Range("C1:C" & lrow).Formula = "A1+B1" 

Приведенный выше код приведет к сумме Ax + Bx, где х является соответствующая строка С.
Так что нет необходимости беспокоиться об этом. Просто укажите диапазон, в котором вы хотите получить формулу.
Затем поставьте формулу для первого набора строк только так, как указано выше, и это хорошо.

0

Чтобы вставить формулу, которая является расположение известно, используют формат R1C1 формулы

так что ваша формула, (я предполагаю) в J6, который в настоящее время

=GCDnm(D6,E6) 

становится

=GCDnm(RC[-6],RC[-5]) 

и будет работать в любой J-ячейке - Excel будет отображать его как соответствующую формулу GCDnm(). , если вы хотите узнать, что формула R1C1 не требует изменения параметров, вы можете распечатать (?) значение в ближайшем окне:?

[j6] .formula
= GCDnm (Д6, Е6)
[j6] .formular1c1
= GCDnm (RC [-6], RC [-5])

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