グッド...新VBAのプログラミングやイブニング
私はVBAに非常に新しいです...が、たったの約一週間のためにそれで遊んで、そして最適化するのに役立つする必要がありますされているVBAコードを最適化するための助けが必要マクロ。
現在、実行には約23秒かかっていますが、それを少し落としたいと考えていました。
最初のステップは、 を「ファイルの場所を選択」するプッシュボタンで、その後DBから一つのテーブルには「隠された」というワークシートにダウンロードされ、最終的には、列B:Lは、「UPS料金表」
に「非表示」からコピーされます任意の提案を大幅にあなたは全体のプロセスを遅くすることができるOLEDB接続を行っている
Sub Selectfile()
Dim filename As String
filename = Application.GetOpenFilename(MultiSelect:=False)
Range("c2") = filename
Dim StartTime As Double
Dim SecondsElapsed As Double
StartTime = Timer
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sQRY As String
Dim rng As Range
Dim cell As Range
Dim sourcefile As String
sourcefile = Sheet1.Range("C2")
Sheets("Hidden").Visible = True
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set rng = Sheet9.Range("B1:B762")
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & sourcefile & ";"
sQRY = "SELECT * FROM Tariff"
rs.CursorLocation = adUseClient
rs.Open sQRY, cnn, adOpenStatic, adLockReadOnly
Application.ScreenUpdating = False
Sheet9.Range("A1").CopyFromRecordset rs
rs.Close
Set rs = Nothing
cnn.Close
Set cnn = Nothing
For Each cell In rng
If cell <> "Letter" And cell <> "NDA" And cell <> "NDAS" And cell <> "2DA" And cell <> "3DS" And cell <> "GND" Then cell.Value = cell.Value * 1
Next cell
Sheets("Hidden").Select
Range("B1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("UPS Tariff").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Sheets("Hidden").Select
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Clear
Sheets("Info").Select
Sheets("Hidden").Visible = xlVeryHidden
SecondsElapsed = Round(Timer - StartTime, 2)
'Notify user in seconds
MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", vbInformation
End Sub
あなたの 'For Each'ループの目的は何ですか?あなたは 'cell.Value = cell.Value * 1'とは何を考えていますか?また、あなたのループの 'if'は、セルごとに6回、セルの値を読み、' Rng'のサイズ(762)を掛けたものに注意してください。そのため、変数を使って1回だけ読み取るか、配列を使用してください。 –