2014-01-06 2 views
1

я использую Excel для определенной обработки работы. У меня около 250 000 строк данных, охватывающих несколько столбцов, поэтому обработка займет несколько минут. Новые строки данных всегда добавляются, поэтому для запуска макроса будут использоваться последние строки столбца B. Это так, что приведенные ниже формулы могут быть вставлены для x-ряда строк.Склеивания формулы из последней строки до конца строки эталонного

Sub macro2() 


Dim lastrow As Long 


lastrow = Cells(Rows.Count, "B").End(xlUp).Row 

Range("J6:J" & lastrow).Formula = "GCDnm(D6,E6)" 
Range("K6:K" & lastrow).Formula = "LOOKUP(....)" 

End Sub 

Есть ли способ сделать этот код более эффективным? Например, вместо вставки формулы из J6 или K6 в последнюю строку (J250000 или K250000) каждый раз, когда вы запускаете макрос? Есть ли способ, которым он вместо этого вставляет формулу от J230000 до J250000?

ответ

1

Да, вы можете, вам просто нужно обнаружить lastrow колонки J K &

Попробуйте что-то вроде этого:

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 

Надеется, что это работает :)

+0

спасибо миллион! это сработало отлично ~! : D –

+0

Рад, что это работает! хороший день :) – Milanor

+0

У меня есть последний вопрос. Похоже, что когда коды пасты от J230000 до J250000, вставленное уравнение начинается с строки 6 (т. Е. GCDnm (D6, E6) вставлен на J23000 вместо GCDnm (D230000, E230000). Как мы это решаем? –

0

В связи с ограничениями в разделе комментариев, мне нужно отправить его в раздел ответов.

Хорошо, во-первых, я думал, что вы хотите, чтобы формула, которая будет начиная со строки 6.

Если вы используете функцию .Formula, формула внутри клетки будут статичными (то же самое, что написано внутри строки прошлого равной метки).

Есть 2 способа сделать это:

Во-первых, вы можете использовать цикл от lastrowJ до lastrow как это:

For i = lastrowJ + 1 to lastrow 
    Range("J" & i).Formula = "GCDnm(D" & i & ",E" & i)" 
Next 

сделать то же самое для столбца K.

Второй способ заключается в использовании метода .Paste, в котором будет вести себя как делать копию и вставить вручную на Excel (строки будет автоматически увеличена, чтобы следовать за уважаемую строку) Пример:

Range("J1").Select 
    Selection.Copy 
Range("J" & lastrowJ+1 & ":J" & lastrow).Select 
    ActiveSheet.Paste 

Однако последний метод не отражает хорошие методы программирования и в которых я предпочитаю использовать ранее упомянутый метод над последним.

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