2017-09-11 25 views
-8

で、次のVBAコードを実行するのに長い時間がかかり、このコードを高速に実行するように変更することができればVBAコードは、Excel

Sub LOOK() 

Worksheets("Input").Unprotect ("ds12345") 
Dim found As Range 
Set found = Sheets("Records").Columns("D").Find(What:=ActiveSheet.Cells(3, 13).Value, SearchDirection:=xlPrevious, LookIn:=xlValues, LookAt:=xlWhole) 
If found Is Nothing Then 
    MsgBox "Not found" 
Else 
    MsgBox "Found on row " & found.Row 
End If 

    Dim iRow As Integer 

    iRow = InputBox("Which row?") 

    Worksheets("Input").Cells(2, 1).Value = Worksheets("Records").Cells(iRow, 2).Value 
    Worksheets("Input").Cells(4, 2).Value = Worksheets("Records").Cells(iRow, 3).Value 
    Worksheets("Input").Cells(3, 13).Value = Worksheets("Records").Cells(iRow, 4).Value 
    Worksheets("Input").Cells(4, 13).Value = Worksheets("Records").Cells(iRow, 5).Value 
    Worksheets("Input").Cells(10, 3).Value = Worksheets("Records").Cells(iRow, 6).Value 
    Worksheets("Input").Cells(3, 16).Value = Worksheets("Records").Cells(iRow, 7).Value 
    Worksheets("Input").Cells(9, 7).Value = Worksheets("Records").Cells(iRow, 9).Value 
    Worksheets("Input").Cells(12, 7).Value = Worksheets("Records").Cells(iRow, 10).Value 
    Worksheets("Input").Cells(13, 7).Value = Worksheets("Records").Cells(iRow, 11).Value 
    Worksheets("Input").Cells(9, 14).Value = Worksheets("Records").Cells(iRow, 12).Value 
    Worksheets("Input").Cells(94, 5).Value = Worksheets("Records").Cells(iRow, 13).Value 
    Worksheets("Input").Cells(95, 5).Value = Worksheets("Records").Cells(iRow, 14).Value 
    Worksheets("Input").Cells(97, 2).Value = Worksheets("Records").Cells(iRow, 15).Value 
    Worksheets("Input").Cells(20, 1).Value = Worksheets("Records").Cells(iRow, 16).Value 
    Worksheets("Input").Cells(21, 1).Value = Worksheets("Records").Cells(iRow, 17).Value 
    Worksheets("Input").Cells(22, 1).Value = Worksheets("Records").Cells(iRow, 18).Value 
    Worksheets("Input").Cells(23, 1).Value = Worksheets("Records").Cells(iRow, 19).Value 
    Worksheets("Input").Cells(24, 1).Value = Worksheets("Records").Cells(iRow, 20).Value 
    Worksheets("Input").Cells(25, 1).Value = Worksheets("Records").Cells(iRow, 21).Value 
    Worksheets("Input").Cells(26, 1).Value = Worksheets("Records").Cells(iRow, 22).Value 
    Worksheets("Input").Cells(27, 1).Value = Worksheets("Records").Cells(iRow, 23).Value 
    Worksheets("Input").Cells(28, 1).Value = Worksheets("Records").Cells(iRow, 24).Value 
    Worksheets("Input").Cells(29, 1).Value = Worksheets("Records").Cells(iRow, 25).Value 
    Worksheets("Input").Cells(30, 1).Value = Worksheets("Records").Cells(iRow, 26).Value 
    Worksheets("Input").Cells(31, 1).Value = Worksheets("Records").Cells(iRow, 27).Value 
    Worksheets("Input").Cells(32, 1).Value = Worksheets("Records").Cells(iRow, 28).Value 
    Worksheets("Input").Cells(33, 1).Value = Worksheets("Records").Cells(iRow, 29).Value 
    Worksheets("Input").Cells(34, 1).Value = Worksheets("Records").Cells(iRow, 30).Value 
    Worksheets("Input").Cells(20, 11).Value = Worksheets("Records").Cells(iRow, 31).Value 
    Worksheets("Input").Cells(21, 11).Value = Worksheets("Records").Cells(iRow, 32).Value 
    Worksheets("Input").Cells(22, 11).Value = Worksheets("Records").Cells(iRow, 33).Value 
    Worksheets("Input").Cells(23, 11).Value = Worksheets("Records").Cells(iRow, 34).Value 
    Worksheets("Input").Cells(24, 11).Value = Worksheets("Records").Cells(iRow, 35).Value 
    Worksheets("Input").Cells(42, 11).Value = Worksheets("Records").Cells(iRow, 37).Value 
    Worksheets("Input").Cells(43, 11).Value = Worksheets("Records").Cells(iRow, 38).Value 
    Worksheets("Input").Cells(44, 11).Value = Worksheets("Records").Cells(iRow, 39).Value 
    Worksheets("Input").Cells(45, 11).Value = Worksheets("Records").Cells(iRow, 40).Value 
    Worksheets("Input").Cells(46, 11).Value = Worksheets("Records").Cells(iRow, 41).Value 
    Worksheets("Input").Cells(47, 11).Value = Worksheets("Records").Cells(iRow, 42).Value 
    Worksheets("Input").Cells(48, 11).Value = Worksheets("Records").Cells(iRow, 43).Value 
    Worksheets("Input").Cells(58, 5).Value = Worksheets("Records").Cells(iRow, 44).Value 
    Worksheets("Input").Cells(59, 5).Value = Worksheets("Records").Cells(iRow, 45).Value 
    Worksheets("Input").Cells(60, 5).Value = Worksheets("Records").Cells(iRow, 46).Value 
    Worksheets("Input").Cells(58, 8).Value = Worksheets("Records").Cells(iRow, 47).Value 
    Worksheets("Input").Cells(59, 8).Value = Worksheets("Records").Cells(iRow, 48).Value 
    Worksheets("Input").Cells(60, 8).Value = Worksheets("Records").Cells(iRow, 49).Value 
    Worksheets("Input").Cells(58, 11).Value = Worksheets("Records").Cells(iRow, 50).Value 
    Worksheets("Input").Cells(59, 11).Value = Worksheets("Records").Cells(iRow, 51).Value 
    Worksheets("Input").Cells(60, 11).Value = Worksheets("Records").Cells(iRow, 52).Value 
    Worksheets("Input").Cells(58, 14).Value = Worksheets("Records").Cells(iRow, 53).Value 
    Worksheets("Input").Cells(59, 14).Value = Worksheets("Records").Cells(iRow, 54).Value 
    Worksheets("Input").Cells(60, 14).Value = Worksheets("Records").Cells(iRow, 55).Value 
    Worksheets("Input").Cells(65, 18).Value = Worksheets("Records").Cells(iRow, 56).Value 
    Worksheets("Input").Cells(104, 18).Value = Worksheets("Records").Cells(iRow, 76).Value 

    If [l8] = [n9] Then 
     [K8] = "YES" 
     End If 
    If [l9] = [n9] Then 
     [K9] = "YES" 
     End If 
    If [l10] = [n9] Then 
     [K10] = "YES" 
     End If 
    If [l12] = [n9] Then 
     [K12] = "YES" 
     End If 
    If [l13] = [n9] Then 
     [K13] = "YES" 
     End If 
    If [l14] = [n9] Then 
     [K14] = "YES" 
     End If 
    If [l15] = [n9] Then 
     [K15] = "YES" 
     End If 
    If [l16] = [n9] Then 
     [K16] = "YES" 
     End If 
    If [l17] = [n9] Then 
     [K17] = "YES" 
    End If 

Worksheets("Input").Protect ("ds12345") 
End Sub 

を実行するのに長い時間がかかります。またはワークシート「レコード」からデータを抽出するためにワークシート「入力」から高速に実行するために、別のVBAコードを記述する必要がある場合。ありがとう

+3

もしそれが動作するのであれば、それはコードレビューに属します:https://codereview.stackexchange.com/動作しない場合は、どこが間違っているのか説明してください。 –

+0

@ScottCraner:私は違うことを願います - 書かれたコードには風土病の問題があります。この問題に遭遇したFinancial Analystは、Code ReviewではなくStack Overflowを使用してヘルプを探すと考えています。 –

+6

@PieterGeerkensどこに見えるかは関係ありません。 StackOverflowは問題のあるコード用ですが、コードレビューは動作するコードの高速化に役立ちます。それはスナイパー対ショットガンの問題です。スタックオーバーフローは狙撃兵、特定の問題です。標準の設定では、このフォーラムではコードの改善が広すぎます。コードレビューのための場所ではありません。そのため、コードレビューはコードが機能すると主張しています。 –

答えて

-2

Excelセルから読み書きするたびに、膨大な手荷物が運ばれます。範囲へのまたは範囲からの反復コピーのパフォーマンスは、Rangeへの配列コピーを配列に実行してから、配列をその範囲に戻すことによって、30〜100倍高速に実行できます。

ちょうど画像

が、ここでは、セル・バイ・セルコピーのinstaedも画面の更新を無効後、性能は、アレイ・コピーを使用して> 30倍向上した、インスタンスの例である:

enter image description here

0

私はこのようなVBAをスピードアップするために行う最初のことは、コードのクリーン度については

Sub LOOK() 

Application.ScreenUpdating = False 

Worksheets("Input").Unprotect ("ds12345") 
Dim found As Range 
Set found = Sheets("Records").Columns("D").Find(What:=ActiveSheet.Cells(3, 13).Value, SearchDirection:=xlPrevious, LookIn:=xlValues, LookAt:=xlWhole) 
If found Is Nothing Then 
    MsgBox "Not found" 
Else 
    MsgBox "Found on row " & found.Row 
End If 

Dim iRow As Integer 

iRow = InputBox("Which row?") 

Worksheets("Input").Cells(2, 1).Value = Worksheets("Records").Cells(iRow, 2).Value 
Worksheets("Input").Cells(4, 2).Value = Worksheets("Records").Cells(iRow, 3).Value 
Worksheets("Input").Cells(3, 13).Value = Worksheets("Records").Cells(iRow, 4).Value 
Worksheets("Input").Cells(4, 13).Value = Worksheets("Records").Cells(iRow, 5).Value 
Worksheets("Input").Cells(10, 3).Value = Worksheets("Records").Cells(iRow, 6).Value 
Worksheets("Input").Cells(3, 16).Value = Worksheets("Records").Cells(iRow, 7).Value 
Worksheets("Input").Cells(9, 7).Value = Worksheets("Records").Cells(iRow, 9).Value 
Worksheets("Input").Cells(12, 7).Value = Worksheets("Records").Cells(iRow, 10).Value 
Worksheets("Input").Cells(13, 7).Value = Worksheets("Records").Cells(iRow, 11).Value 
Worksheets("Input").Cells(9, 14).Value = Worksheets("Records").Cells(iRow, 12).Value 
Worksheets("Input").Cells(94, 5).Value = Worksheets("Records").Cells(iRow, 13).Value 
Worksheets("Input").Cells(95, 5).Value = Worksheets("Records").Cells(iRow, 14).Value 
Worksheets("Input").Cells(97, 2).Value = Worksheets("Records").Cells(iRow, 15).Value 
Worksheets("Input").Cells(20, 1).Value = Worksheets("Records").Cells(iRow, 16).Value 
Worksheets("Input").Cells(21, 1).Value = Worksheets("Records").Cells(iRow, 17).Value 
Worksheets("Input").Cells(22, 1).Value = Worksheets("Records").Cells(iRow, 18).Value 
Worksheets("Input").Cells(23, 1).Value = Worksheets("Records").Cells(iRow, 19).Value 
Worksheets("Input").Cells(24, 1).Value = Worksheets("Records").Cells(iRow, 20).Value 
Worksheets("Input").Cells(25, 1).Value = Worksheets("Records").Cells(iRow, 21).Value 
Worksheets("Input").Cells(26, 1).Value = Worksheets("Records").Cells(iRow, 22).Value 
Worksheets("Input").Cells(27, 1).Value = Worksheets("Records").Cells(iRow, 23).Value 
Worksheets("Input").Cells(28, 1).Value = Worksheets("Records").Cells(iRow, 24).Value 
Worksheets("Input").Cells(29, 1).Value = Worksheets("Records").Cells(iRow, 25).Value 
Worksheets("Input").Cells(30, 1).Value = Worksheets("Records").Cells(iRow, 26).Value 
Worksheets("Input").Cells(31, 1).Value = Worksheets("Records").Cells(iRow, 27).Value 
Worksheets("Input").Cells(32, 1).Value = Worksheets("Records").Cells(iRow, 28).Value 
Worksheets("Input").Cells(33, 1).Value = Worksheets("Records").Cells(iRow, 29).Value 
Worksheets("Input").Cells(34, 1).Value = Worksheets("Records").Cells(iRow, 30).Value 
Worksheets("Input").Cells(20, 11).Value = Worksheets("Records").Cells(iRow, 31).Value 
Worksheets("Input").Cells(21, 11).Value = Worksheets("Records").Cells(iRow, 32).Value 
Worksheets("Input").Cells(22, 11).Value = Worksheets("Records").Cells(iRow, 33).Value 
Worksheets("Input").Cells(23, 11).Value = Worksheets("Records").Cells(iRow, 34).Value 
Worksheets("Input").Cells(24, 11).Value = Worksheets("Records").Cells(iRow, 35).Value 
Worksheets("Input").Cells(42, 11).Value = Worksheets("Records").Cells(iRow, 37).Value 
Worksheets("Input").Cells(43, 11).Value = Worksheets("Records").Cells(iRow, 38).Value 
Worksheets("Input").Cells(44, 11).Value = Worksheets("Records").Cells(iRow, 39).Value 
Worksheets("Input").Cells(45, 11).Value = Worksheets("Records").Cells(iRow, 40).Value 
Worksheets("Input").Cells(46, 11).Value = Worksheets("Records").Cells(iRow, 41).Value 
Worksheets("Input").Cells(47, 11).Value = Worksheets("Records").Cells(iRow, 42).Value 
Worksheets("Input").Cells(48, 11).Value = Worksheets("Records").Cells(iRow, 43).Value 
Worksheets("Input").Cells(58, 5).Value = Worksheets("Records").Cells(iRow, 44).Value 
Worksheets("Input").Cells(59, 5).Value = Worksheets("Records").Cells(iRow, 45).Value 
Worksheets("Input").Cells(60, 5).Value = Worksheets("Records").Cells(iRow, 46).Value 
Worksheets("Input").Cells(58, 8).Value = Worksheets("Records").Cells(iRow, 47).Value 
Worksheets("Input").Cells(59, 8).Value = Worksheets("Records").Cells(iRow, 48).Value 
Worksheets("Input").Cells(60, 8).Value = Worksheets("Records").Cells(iRow, 49).Value 
Worksheets("Input").Cells(58, 11).Value = Worksheets("Records").Cells(iRow, 50).Value 
Worksheets("Input").Cells(59, 11).Value = Worksheets("Records").Cells(iRow, 51).Value 
Worksheets("Input").Cells(60, 11).Value = Worksheets("Records").Cells(iRow, 52).Value 
Worksheets("Input").Cells(58, 14).Value = Worksheets("Records").Cells(iRow, 53).Value 
Worksheets("Input").Cells(59, 14).Value = Worksheets("Records").Cells(iRow, 54).Value 
Worksheets("Input").Cells(60, 14).Value = Worksheets("Records").Cells(iRow, 55).Value 
Worksheets("Input").Cells(65, 18).Value = Worksheets("Records").Cells(iRow, 56).Value 
Worksheets("Input").Cells(104, 18).Value = Worksheets("Records").Cells(iRow, 76).Value 

If [l8] = [n9] Then 
    [K8] = "YES" 
    End If 
If [l9] = [n9] Then 
    [K9] = "YES" 
    End If 
If [l10] = [n9] Then 
    [K10] = "YES" 
    End If 
If [l12] = [n9] Then 
    [K12] = "YES" 
    End If 
If [l13] = [n9] Then 
    [K13] = "YES" 
    End If 
If [l14] = [n9] Then 
    [K14] = "YES" 
    End If 
If [l15] = [n9] Then 
    [K15] = "YES" 
    End If 
If [l16] = [n9] Then 
    [K16] = "YES" 
    End If 
If [l17] = [n9] Then 
    [K17] = "YES" 
End If 

Worksheets("Input").Protect ("ds12345") 

Application.ScreenUpdating = True 

End Sub 

の更新画面を使用することです私はとき、二次ループになるだろう

Worksheets("Input").Cells(42, 11).Value = Worksheets("Records").Cells(iRow, 37).Value 
Worksheets("Input").Cells(43, 11).Value = Worksheets("Records").Cells(iRow, 38).Value 
Worksheets("Input").Cells(44, 11).Value = Worksheets("Records").Cells(iRow, 39).Value 
Worksheets("Input").Cells(45, 11).Value = Worksheets("Records").Cells(iRow, 40).Value 
Worksheets("Input").Cells(46, 11).Value = Worksheets("Records").Cells(iRow, 41).Value 
Worksheets("Input").Cells(47, 11).Value = Worksheets("Records").Cells(iRow, 42).Value 
Worksheets("Input").Cells(48, 11).Value = Worksheets("Records").Cells(iRow, 43).Value 

選択のより効率的な方法があったかは言い難いように、我々はデータを持っていないが、私はコピー&ペーストを使用していることを想像して:あなたは、増分などの増加値がたくさんありますこれのほとんどは特別価値がはるかに速くなります。