EXCEL VBA如何为其他内容更改IF(循环)?

时间:2016-02-18 11:27:52

标签: excel vba excel-vba ms-office

我有这个代码可以工作,但它需要很多时间我确定有一种方法来优化它我做了一些研究,但我找不到如何。我的文件真的很大(100mb +)所以任何使这段代码更快的必要条件。

lastrowLaneTemplate = Sheets("LaneTemplate").Range("A65536").End(xlUp).Row
lastrowCarrier = Sheets("Routed").Range("B65536").End(xlUp).Row
lastrowCarrierd = Sheets("Routed").Range("B65536").End(xlUp).Row

 j = 2
  For i = 10 To lastrowLanetemplate
    For z = 2 To lastrowCarrier
     If Sheetlanetemplate.Cells(i, 4).Value <> "" Then
     If Sheetlanetemplate.Cells(i, 4) = sheetCarrier.Cells(z, 1) And _
     sheetCarrier.Cells(z, 3) = "1" Then

     sheetcarrierd.Cells(j, 1) = sheetCarrier.Cells(z, 1)
     sheetcarrierd.Cells(j, 2) = sheetCarrier.Cells(z, 2)
     sheetcarrierd.Cells(j, 3) = sheetCarrier.Cells(z, 3)
     sheetcarrierd.Cells(j, 4) = sheetCarrier.Cells(z, 4)
     sheetcarrierd.Cells(j, 5) = sheetCarrier.Cells(z, 5)
     sheetcarrierd.Cells(j, 6) = sheetCarrier.Cells(z, 6)
     sheetcarrierd.Cells(j, 7) = sheetCarrier.Cells(z, 7)
     sheetcarrierd.Cells(j, 8) = sheetCarrier.Cells(z, 8)
     sheetcarrierd.Cells(j, 9) = sheetCarrier.Cells(z, 9)
     sheetcarrierd.Cells(j, 10) = sheetCarrier.Cells(z, 10)
     sheetcarrierd.Cells(j, 11) = sheetCarrier.Cells(z, 11)

     j = j + 1
  End if
 Next z
Next y

正如你所看到的那样有效,但它需要一些时间,而且我有10倍。所以,如果有办法在没有IF的情况下做到这一点,那将是完美的

2 个答案:

答案 0 :(得分:1)

我的想法是将if...end if语句中的11行更改为一行:

sheetcarrierd.Range(sheetcarrierd.Cells(j, 1), sheetcarrierd.Cells(j, 11)).Value = _
        sheetCarrier.Range(sheetCarrier.Cells(Z, 1), sheetCarrier.Cells(Z, 11)).Value

但我不确定它是否会显着改善效果。

答案 1 :(得分:1)

你们已经在使用这些吗?

开始时:

Application.Calculation = xlCalculationManual

Application.ScreenUpdating = False

最后:

Application.Calculation = xlCalculationAutomatic

Application.ScreenUpdating = True