Excel,VBA代码超过最后一行

我感到困惑,为什么我的代码超过了最后一行。 如果我在一个有30,000行的工作表上运行它,它会填充到大约300k。 这张表格计算我所有的客户交易。 一点混淆在哪种方式将是最有效的计算方法,使用VBA插入的每一行上使用Vlookup函数,或使用VBA来计算总和并显示在单元格中。 这是我的代码:

Sub UPDATE() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False lastRow = Sheets("Closed Trades").Range("A" & Rows.Count).End(xlUp).Row lastRow2 = Sheets("Open Orders").Range("A" & Rows.Count).End(xlUp).Row With Sheets("Closed Trades") .Range("Q3:Q3" & lastRow).FormulaR1C1 = "=SUBSTITUTE(LEFT(RC[-13],10),""."",""/"")" .Range("R3:R3" & lastRow).FormulaR1C1 = "=SUBSTITUTE(LEFT(RC[-9],10),""."",""/"")" .Range("S3:S3" & lastRow).FormulaR1C1 = "=VLOOKUP(RC[-13],'Symbols & Spreads'!C[-18]:C[-16],3,FALSE)" .Range("T3:T3" & lastRow).FormulaR1C1 = "=VLOOKUP(RC[-14],'Symbols & Spreads'!C[-19]:C[-14],6,FALSE)" .Range("U3:U3" & lastRow).FormulaR1C1 = "=VLOOKUP(RC[-15],'Symbols & Spreads'!C[-20]:C[-13],8,FALSE)*RC[-14]" .Range("V3:V3" & lastRow).FormulaR1C1 = "=IF(RC[-2]=""eur"",RC[-1]*R6C25,RC[-1]/(VLOOKUP(RC[-2],C[2]:C[3],2,FALSE)))" End With With Sheets("Open Orders") .Range("T3:T3" & lastRow2).FormulaR1C1 = "=SUBSTITUTE(LEFT(RC[-17],10),""."",""/"")" .Range("U3:U3" & lastRow2).FormulaR1C1 = "=VLOOKUP(RC[-16],'Symbols & Spreads'!C[-20]:C[-18],3,FALSE)" .Range("V3:V3" & lastRow2).FormulaR1C1 = "=VLOOKUP(RC[-17],'Symbols & Spreads'!C[-21]:C[-16],6,FALSE)" .Range("W3:W3" & lastRow2).FormulaR1C1 = "=VLOOKUP(RC[-18],'Symbols & Spreads'!C[-22]:C[-15],8,FALSE)*RC[-17]" .Range("X3:X3" & lastRow2).FormulaR1C1 = "=IF(RC[-2]=""eur"",RC[-1]*R6C27,RC[-1]/(VLOOKUP(RC[-2],C[2]:C[3],2,FALSE)))" End With Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub 

您必须更换:

 .Range("Q3:Q3" & lastRow) 

有:

 .Range("Q3:Q" & lastRow) 

等等

额外的3是问题。

你可以尝试改变

 lastRow = Sheets("Closed Trades").Range("A" & Rows.Count).End(xlUp).Row 

 lastRow = Sheets("Closed Trades").Range("A1").End(xlDown).Row 

 .Range("Q3:Q3" & lastRow).FormulaR1C1 = "=SUBSTITUTE(LEFT(RC[-13],10),""."",""/"")" 

 .Range("Q3:Q" & lastRow).FormulaR1C1 = "=SUBSTITUTE(LEFT(RC[-13],10),""."",""/"")"