VBAで単純なネストされたforループを作成してワークシートのレコードをループし、条件に基づいて値を見つけたら現在のワークシートに値をコピーします。データを操作しようとした後にExcelループがハングアップする
NumRows
とNumRowSTGSales
の値はそれぞれ4000と8000です。コードを実行すると、Excelがハングするだけです。
Dim curRowNo As Long
curRowNo = 2
NumRowSTGSales = Worksheets("Worksheet1").UsedRange.Rows.Count
' Set numrows = number of rows of data.
NumRows = Worksheets("Worksheet2").UsedRange.Rows.Count
' Select cell a1.
' Looping through GL accounts
'Looping through items in GL accounts
For y = 2 To NumRows
'Looping through customer code found in sales data
For z = 2 To NumRowSTGSales
dataGL = Worksheets("Worksheet1").Cells(y, "A").Value
dataItem = Worksheets("Worksheet1").Cells(y, "B").Value
itemSales = Worksheets("Worksheet2").Cells(z, "F").Value
If dataItem = itemSales Then
dataCustomer = Worksheets("Worksheet2").Cells(z, "E").Value
Worksheets("CurrentWorksheet").Cells(curRowNo, "A").Value = dataGL
Worksheets("CurrentWorksheet").Cells(curRowNo, "B").Value = dataItem
Worksheets("CurrentWorksheet").Cells(curRowNo, "C").Value = dataCustomer
curRowNo = curRowNo + 1
End If
Next z
Next y
内部ループの内部を約32,000,000回実行していることにご存知ですか?さらに、各ループはいくつかの参照をしていますか?あなたが**それが**掛かっていると言うとき、あなたはそれが完了するのをどれくらい待ったのですか? – FDavidov
control + breakとhooverを押して 'y'を' z'で調べ、値をチェックして、スタックしているかループしているかを確認します。最終的にF8を使用してコードを実行します –
コードでシミュレーションを実行しただけで、「Worksheet1」に300行、「Worksheet2」に300行が使用されました。完了するまでに3分以上かかる3分17秒)。 100回以上のデータを持つコードを実行すると想像してください。 –