Excel 运行宏需要30分钟,请简化
我正在尝试对大约10万行长的SAP pull进行排序。排序需要30分钟才能运行。你能看一下这个,看看我能不能简化我的排序 谢谢 '''Excel 运行宏需要30分钟,请简化,excel,vba,Excel,Vba,我正在尝试对大约10万行长的SAP pull进行排序。排序需要30分钟才能运行。你能看一下这个,看看我能不能简化我的排序 谢谢 ''' 子排序\u CFG\u发票和\u选项卡() 将wb设置为工作簿 将Ws2设置为工作表 设置wb=工作簿(“TTB-库存-CFG_CL”) 设置Ws2=wb.工作表(“发票”) Ws2.激活 我和你一样长,我和你一样长 N=单元格(Rows.Count,“H”)。结束(xlUp)。行 对于i=N到2步骤-1 如果单元格(i,“V”)=“0”和单元格(i,“X”)=
子排序\u CFG\u发票和\u选项卡()
将wb设置为工作簿
将Ws2设置为工作表
设置wb=工作簿(“TTB-库存-CFG_CL”)
设置Ws2=wb.工作表(“发票”)
Ws2.激活
我和你一样长,我和你一样长
N=单元格(Rows.Count,“H”)。结束(xlUp)。行
对于i=N到2步骤-1
如果单元格(i,“V”)=“0”和单元格(i,“X”)=“0”,则
单元格(i,“V”).EntireRow.Delete
如果结束
如果左(单元格(i,“H”),2)=“AA”或左(单元格(i,“H”),2)=“DM”或左(单元格(i,“H”),2)=“MX”或左(单元格(i,“i”),3)=“EFN”,则
单元格(i,“H”).EntireRow.Delete
如果结束
接下来我
N=单元格(行数,“U”)。结束(xlUp)。行
单元(N+2,“U”)=“总计”
单元(N+3,“U”)=“负库存”
单元格(N+4,“U”)=“更新总数”
单元格(N+6,“U”)=“上月末”
单元(N+8,“U”)=“差异”
单元格(N+2,“V”)。公式=“=SUM(V2:V”&N&”)
单元格(N+3,“V”).Formula=“=SUMIF(V2:V”&N&“,””,因为这段代码很可能更适合。也就是说,这里有一些提示:1)关闭自动计算并在结束时打开/recalc,2)不要删除循环中的行,而是使用union收集要删除的行,然后在循环完成后运行一个delete语句。我认为仅这两件事就可以极大地加快您的时间,甚至可以缩短一分钟左右。谢谢!我想我的问题是ld be,如何将符合条件的行添加到联合中?另一个选项是将所有数据加载到数组中,在数组中进行排序,然后将筛选/排序后的数据粘贴回工作表,替换以前的数据。从SAP中提取排序后的数据!联合命令工作正常。排序时间降至45秒左右。谢谢!
Sub Sort_CFG_InvOnHand_Tab()
Dim wb As Workbook
Dim Ws2 As Worksheet
Set wb = Workbooks("TTB - Inv on hand - CFG_CL")
Set Ws2 = wb.Worksheets("InvOnHand")
Ws2.Activate
Dim N As Long, i As Long
N = Cells(Rows.Count, "H").End(xlUp).Row
For i = N To 2 Step -1
If Cells(i, "V") = "0" And Cells(i, "X") = "0" Then
Cells(i, "V").EntireRow.Delete
End If
If Left(Cells(i, "H"), 2) = "AA" Or Left(Cells(i, "H"), 2) = "DM" Or Left(Cells(i, "H"), 2) = "MX" Or Left(Cells(i, "I"), 3) = "EFN" Then
Cells(i, "H").EntireRow.Delete
End If
Next i
N = Cells(Rows.Count, "U").End(xlUp).Row
Cells(N + 2, "U") = "Total"
Cells(N + 3, "U") = "Negative Inventory"
Cells(N + 4, "U") = "Updated Total"
Cells(N + 6, "U") = "Prior Month Ending"
Cells(N + 8, "U") = "Difference"
Cells(N + 2, "V").Formula = "=SUM(V2:V" & N & ")"
Cells(N + 3, "V").Formula = "=SUMIF(V2:V" & N & ",""<0"")"
Cells(N + 4, "V") = Cells(N + 1, "V") - Cells(N + 2, "V")
Cells(N + 2, "X").Formula = "=SUM(X2:X" & N & ")"
Cells(N + 3, "X").Formula = "=SUMIF(X2:X" & N & ",""<0"")"
Cells(N + 4, "V") = Cells(N + 1, "V") - Cells(N + 2, "V")
MsgBox ("Sort Complete")
End Sub