Здравствуйте! Как малоопытный пользователь обращаюсь к знатокам VBA за помощью. С листа EXPORT столбец А нужно скопировать только выделенные данные на лист IMPORT в пяти столбцах. На листе IMPORT я нарисовал что хотел бы получть в итоге. Количество строк в столбце А разное, но не более 100 000. Файл прилагаю.
Здравствуйте! Как малоопытный пользователь обращаюсь к знатокам VBA за помощью. С листа EXPORT столбец А нужно скопировать только выделенные данные на лист IMPORT в пяти столбцах. На листе IMPORT я нарисовал что хотел бы получть в итоге. Количество строк в столбце А разное, но не более 100 000. Файл прилагаю.baciu
Sub ertert() Dim x, y(), i&, k& With Sheets("EXPORT") x = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).Value End With ReDim y(1 To UBound(x) / 4, 1 To 5)
For i = 1 To UBound(x) If x(i, 1) = "DocStart" Then k = k + 1 y(k, 1) = CDate(Mid(x(i + 2, 1), 14)) 'DOCUMENTDATE y(k, 2) = Val(Mid(x(i + 1, 1), 16)) 'DOCUMENTNUMBER y(k, 3) = Mid(x(i + 9, 1), 10) 'RECEIVER y(k, 4) = Val(Mid(x(i + 14, 1), 8)) 'AMOUNT y(k, 5) = Trim(Mid(x(i + 15, 1), 8)) 'GROUND End If Next i
With Sheets("IMPORT") .Range("A1").CurrentRegion.Offset(1).ClearContents If k > 0 Then .Range("A2:E2").Resize(k).Value = y .Activate End With End Sub
[/vba]
baciu, привет попробуйте
[vba]
Код
Sub ertert() Dim x, y(), i&, k& With Sheets("EXPORT") x = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).Value End With ReDim y(1 To UBound(x) / 4, 1 To 5)
For i = 1 To UBound(x) If x(i, 1) = "DocStart" Then k = k + 1 y(k, 1) = CDate(Mid(x(i + 2, 1), 14)) 'DOCUMENTDATE y(k, 2) = Val(Mid(x(i + 1, 1), 16)) 'DOCUMENTNUMBER y(k, 3) = Mid(x(i + 9, 1), 10) 'RECEIVER y(k, 4) = Val(Mid(x(i + 14, 1), 8)) 'AMOUNT y(k, 5) = Trim(Mid(x(i + 15, 1), 8)) 'GROUND End If Next i
With Sheets("IMPORT") .Range("A1").CurrentRegion.Offset(1).ClearContents If k > 0 Then .Range("A2:E2").Resize(k).Value = y .Activate End With End Sub
Между DocStart и DocEnd 21 строка, а выбираем только 5. Т.е. выходной массив будет иметь примерно в 4 раза меньше строк. Ну чтобы не загружать память. Хотя 100000 строк для массива не слишком много, можно и так ReDim y(1 To UBound(x), 1 To 5)
Между DocStart и DocEnd 21 строка, а выбираем только 5. Т.е. выходной массив будет иметь примерно в 4 раза меньше строк. Ну чтобы не загружать память. Хотя 100000 строк для массива не слишком много, можно и так ReDim y(1 To UBound(x), 1 To 5)nilem