Мой ответ такой же, как у Тима Уильямса, только другой (великие умы думают как мой).Я добавил сообщение Application.StatusBar
, чтобы облегчить сознание бедного парня, которому придется ждать, пока это не обработается.Я также записываю все данные сразу.
Возможно, вы захотите поэкспериментировать с MAX_ROWS_PER_COLUMN
.100К может работать лучше, чем 1000К (для ежедневного использования время обработки будет примерно таким же).В любом случае файл Excel объемом 316 МБ не является идеальным.Я рекомендую использовать базу данных.
Sub FirstMACR_ATV()
Dim t As Long: t = Timer
Const MAX_ROWS_PER_COLUMN AS Long = 1000000
Dim r As Long, c As Long
Dim myFile As String, textline As String
Dim results() As Variant
myFile = "C:\Users\s3850630\Desktop\EXPMST.dat"
Open myFile For Input As #1
Do Until EOF(1)
Line Input #1, textline
r = r + 1
If r > MAX_ROWS_PER_COLUMN Or c = 0 Then
c = c + 1
r = 1
ReDim Preserve results(1 To MAX_ROWS_PER_COLUMN, 1 To c)
End If
If r = 50000 Then Application.StatusBar = "Processing record #" & (r * c) & " " & Round(Timer - t, 2) & " Seconds"
results(r, c) = Mid(textline, 15, 30)
Loop
Close #1
Worksheets("Sheet1").Range("A1").Resize(UBound(results), UBound(results, 2)).Value = results
Debug.Print Round(Timer - t, 2)
End Sub