Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 运行宏需要30分钟,请简化_Excel_Vba - Fatal编程技术网

Excel 运行宏需要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”)=

我正在尝试对大约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”)=“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