我正在使用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?
答案 0 :(得分:1)
是的,你可以,你只需要检测J& A列的最后一行。 ķ
尝试这样的事情:
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
希望它有效:)
答案 1 :(得分:0)
由于评论部分的限制,我需要将其发布到答案部分。
好的,首先我认为你希望公式从第6行开始。
如果使用.formula函数,单元格内的公式将是静态的(与字符串内部写入等于标记的内容相同)。
有两种方法可以做到:
首先,你可以使用从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
然而,后一种方法并没有反映良好的编程实践,我更喜欢使用前面提到的方法而不是后者。