1
私はこのコードを実行時の90%のように使います。パフォーマンスの最適化
約8000行あり、情報が列Aに格納されています。このコードは、この情報を他の列に分割しています。 実行に約15分かかります(:O)。 パフォーマンスを改善する方法についてのご意見はありますか?
For i = 2 To Row_Number ' Loop for each row
If InStr(Cells(i, 1), "//") = 0 Then ' This means that if // appears somewhere in the text we delete all the rows (including this one) (see Else :) and stop the loop
j = 1
Do Until Mid(Cells(i, 1), j, 1) = ";"
j = j + 1
Loop
LongVIN = Mid(Cells(i, 1), 1, j - 1)
k = j
j = j + 1
Do Until Mid(Cells(i, 1), j, 1) = ";"
j = j + 1
Loop
Cells(i, 3) = Mid(Cells(i, 1), k + 1, j - k - 1) ' Model
k = j
j = j + 1
Do Until Mid(Cells(i, 1), j, 1) = ";"
j = j + 1
Loop
Cells(i, 4) = Mid(Cells(i, 1), k + 1, j - k - 1) ' Dealer
k = j
j = j + 1
Do Until Mid(Cells(i, 1), j, 1) = ";"
j = j + 1
Loop
k = j
j = j + 1
Do Until Mid(Cells(i, 1), j, 1) = ";"
j = j + 1
Loop
Cells(i, 6) = Mid(Cells(i, 1), k + 1, j - k - 1) ' Region
k = j
j = j + 1
Do Until Mid(Cells(i, 1), j, 1) = ";"
j = j + 1
Loop
Cells(i, 7) = CDate(Mid(Cells(i, 1), k + 1, j - k - 1)) ' Retail Date
k = j
Cells(i, 5) = Mid(Cells(i, 1), k + 1, Len(Cells(i, 1)) - k) '(Len - (k+1) +1) Dealer Name
Cells(i, 1) = Mid(LongVIN, 1, 10)
Cells(i, 2) = Mid(LongVIN, 11, 7)
Else:
Range("A" & i & ":A" & Row_Number).Delete 'ClearContents
Exit For
End If
Next i
WOWノーコメント!今は1秒もかかりません!私はただインデックスを適応させる必要があります。ありがとうございます:) – Seb
私はまた、文字列をループする代わりに 'Split()'を使うことをお勧めします。 – avb
結果配列の2番目の次元の 'Split()'範囲(1次元配列)を各行(2番目のループなし)に格納する方法はありますか?このように、 'result(i-1、:)=分割(セル(i、1)、"; ")'?または、各要素を1ずつ格納するループが必要ですか? ( ":"はすべての要素を意味しますが、VBAでは恐怖です) – Seb