2017-03-07 6 views
2

私はこのプログラムを実行して、150万の '.tab'形式のファイルをExcelに変換します。当初はこのプログラムは正常に動作していましたが、その後速度が遅くなりました。私はいくつかのシステムでこれを試してみました。また、私は一時ファイルをクリアしようとしましたが、クリーンアップを余儀なくされました。それを効率化するために私は何をすべきですか?VBAプログラムが遅くなる

Sub runFiles() 
Application.DisplayAlerts = False 
Application.ScreenUpdating = False 
Application.EnableEvents = False 
Dim fso As New FileSystemObject 
Dim fldr As Object 

Dim fldrPath As String 
Dim i As Double 
Dim wb As Workbook 

fldrPath = "C:\Users\skumar150\Desktop\upwork data\RAW\ACS" 
Set fldr = fso.GetFolder(fldrPath) 

i = 551 

For Each fl In fldr.Files 
    i = i + 1 
    Set wb = Workbooks.Open(fldr.Path & "\" & fl.Name) 
    createFile "C:\Users\skumar150\Desktop\upwork data\Excel Data1\ACS3", wb, i 
    Set wb = Nothing 
    fl.Delete 

Next fl 
Application.EnableEvents = True 
Application.DisplayAlerts = True 
Application.ScreenUpdating = True 

End Sub 

Function createFile(fldrPath As String, ByRef wb1 As Workbook, vr As Double) 
Dim wb As Workbook 
Dim flName As String, fldrName As String 
Dim ws As Worksheet 
Dim delrow As Integer 
Set wb = Workbooks.Add 
Set ws = Worksheets(wb.Sheets(1).Name) 


wb1.Sheets(1).Range("a1").CurrentRegion.Copy wb.Sheets(1).Range("a1") 
fname = wb1.Name 
wb1.Close False 

With wb 
    With ws 
     .Names.Add "countyID", ws.Range("b2").Value 
     .Names.Add "Title", ws.Range("b3").Value 
     .Names.Add "rate_per", ws.Range("b4").Value 
     .Names.Add "topic", ws.Range("b5").Value 
     .Names.Add "yLabel", ws.Range("b6").Value 
     delrow = Application.WorksheetFunction.Match("METADATA END", .Range("a:a"), 0) 
     .Rows("1:" & delrow).Delete 
    End With 
    .Close True, fldrPath & "\__sk" & vr & "_" & fname & ".xlsx" 

End With 
End Function 

答えて

0

おそらく、環境へのアクセスについて深い調査が必要です。 ただし、いくつかの点:

1)ファイル数(1.5 mln)は一定ですか?これを確実にするために、パフォーマンスの低下は反復回数によって引き起こされるものではありません。 (なぜi = 551ですか?)

2)「.Rows( "1:" & delrow).Delete "を使用しないでください。このような範囲操作は、全体のパフォーマンスに影響します。

3)コードにタイマーを入れて、どれくらい時間がかかるかを測定します。 Excelファイルを保存します。ランタイムの90%がファイルセーブによって発生した場合、ネットワークに問題がある可能性があります(企業ネットワーク上で実行している場合)。

関連する問題