以前より皆様の投稿を拝見しており、勉強させていただいております。
ありがとうございます。
早速ですが、初めて質問させていただきます。
最初はFor文を使った処理を行っていたものの、
処理時間が遅いことや配列を使用した処理の方が速くなることを知ったため、
配列を使用した処理を検討しています。
データ量:1万行以上
検索値:文字列&日付
配列Key:文字列&日付
配列Item:Arrayで配列格納
現状としてFor文処理の場合、8-10分程度の処理時間が掛かっており、
理想としては1分以内に処理が完了するように対応を行いたいと考えています。
こちらのサイトで
過去の投稿含め、参考にしつつ配列のコードを繰り返し作成したのですが、
なぜかFor文より処理が遅くなってしまいます。
配列を使用したらなんでもかんでも早くなるというわけではなく、
For文を使った方が早いパターンもあるということでしょうか...?
以下にコードを記載しますので、
改善点や他により早く処理を行う方法ありましたら、
ご教示頂けると大変助かります。
VBA
1Sub 一致転記() 2 3Dim ST As Single, ET As Single 4 5Dim wb As Workbook 6Set wb = ThisWorkbook 7 8Dim ws1 As Worksheet, ws2 As Worksheet 9Set ws1 = wb.Sheets("sheets1") 10Set ws2 = wb.Sheets("sheets2") 11 12 13Dim j, k, x 14Dim lRow1 As Long, lRow2 As Long 15 16Dim list As String 17Dim Arry As Object 18 19Set Arry = CreateObject("Scripting.Dictionary") 20 21lRow1 = ws1.Cells(Rows.count, "B").End(xlUp).Row 22lRow2 = ws2.Cells(Rows.count, "B").End(xlUp).Row 23 24Application.ScreenUpdating = False 25Application.DisplayAlerts = False 26 27ST = Timer 28 29With ws2 30For j = 2 To lRow2 31 32 list = .Cells(j, "G") & .Cells(j, "W") 33 34 ARY.Add list, Array(.Cells(j, "Y"), .Cells(j, "Z"), .Cells(j, "AA"), .Cells(j, "AB")) 35 36Next j 37End With 38 39Dim str, aKey, aItem 40 41With ws1 42For k = 3 To lRow1 43 str = .Cells(k, "B") & .Cells(k, "C") 44 45 For x = 0 To Arry.count - 1 46 aKey = Arry.Keys()(x) 47 aItem = Arry.Items()(x) 48 49 If str = dcKey Then 50 51 .Cells(k, "E") = aItem(0) 52 53 End If 54 55 Next x 56 57Next k 58 59ET = Timer 60ET = ET - ST 61 62Application.ScreenUpdating = True 63Application.DisplayAlerts = True 64 65MsgBox Round(ET / 60, 0) & "." & Round(ET Mod 60, 0) 66 67End Sub 68 69
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/16 12:29 編集
2021/07/16 13:30
2021/07/16 14:11 編集
2021/07/16 14:26
2021/07/17 01:46
2021/07/17 02:16 編集
2021/07/17 03:18
2021/07/17 03:33