Set outFile = fso.CreateTextFile(MyPath & "ExportProducts2.csv")
For i = 0 To UBound(arrstr) If Len(arrstr(i)) Then a = Split(arrstr(i), ";", 4) s = a(0) & "/" & a(1) & "/" & a(2) b(i) = s & Mid(arrstr(i), Len(s) + 1) End If Next
outFile.Write Join(b, vbCrLf)
outFile.Close
MsgBox "OK", vbInformation
[/vba]
Хотя честно говоря не знаю, намного ли быстрее будет Join большого массива чем выгрузка такого массива построчно? Тестить нужно - может сравните на большом файле и расскажете?
Вот такой вариант:
[vba]
Code
Set fso = CreateObject("Scripting.FileSystemObject") MyPath = Left(WScript.ScriptFullName, (Len(WScript.ScriptFullName)) - (Len(WScript.ScriptName)))
Set outFile = fso.CreateTextFile(MyPath & "ExportProducts2.csv")
For i = 0 To UBound(arrstr) If Len(arrstr(i)) Then a = Split(arrstr(i), ";", 4) s = a(0) & "/" & a(1) & "/" & a(2) b(i) = s & Mid(arrstr(i), Len(s) + 1) End If Next
outFile.Write Join(b, vbCrLf)
outFile.Close
MsgBox "OK", vbInformation
[/vba]
Хотя честно говоря не знаю, намного ли быстрее будет Join большого массива чем выгрузка такого массива построчно? Тестить нужно - может сравните на большом файле и расскажете?Hugo
Хотя честно говоря не знаю, намного ли быстрее будет Join большого массива чем выгрузка такого массива построчно? Тестить нужно - может сравните на большом файле и расскажете?
Договорились
Quote (Hugo)
Хотя честно говоря не знаю, намного ли быстрее будет Join большого массива чем выгрузка такого массива построчно? Тестить нужно - может сравните на большом файле и расскажете?
Public Sub www() Dim r As Range: Set r = Range("a2", [a65536].End(xlUp)) r.Value = Evaluate(r.Address & "&""/""&" & _ r.Offset(, 1).Address & "&""/""&" & r.Offset(, 2).Address) [b:c].Delete End Sub
В общем этот вариант самый быстрый,заставляет ждать доли секунды,практический не заставляет даже,а остальные варианты требуют пару секунд,но секунды-это не минуты,поэтому разница не ощущается практический.... Не хотелось озадачивать,но если вы с таким фанатизмом относитесь к этому делу,то может кто подскажет,как сделать такой же вариант,только со столбцами DEQ,т.е. чтобы было так Q/D/E ?
Quote (KuklP)
Public Sub www() Dim r As Range: Set r = Range("a2", [a65536].End(xlUp)) r.Value = Evaluate(r.Address & "&""/""&" & _ r.Offset(, 1).Address & "&""/""&" & r.Offset(, 2).Address) [b:c].Delete End Sub
В общем этот вариант самый быстрый,заставляет ждать доли секунды,практический не заставляет даже,а остальные варианты требуют пару секунд,но секунды-это не минуты,поэтому разница не ощущается практический.... Не хотелось озадачивать,но если вы с таким фанатизмом относитесь к этому делу,то может кто подскажет,как сделать такой же вариант,только со столбцами DEQ,т.е. чтобы было так Q/D/E ?libero23
Сообщение отредактировал libero23 - Среда, 14.11.2012, 01:52
Public Sub www() Dim r As Range: Set r = Range("d2", [d65536].End(xlUp)) r.Value = Evaluate(r.Offset(, 14).Address & "&""/""&" & _ r.Address & "&""/""&" & r.Offset(, 1).Address) [E:E,Q:Q].Delete End Sub
[/vba]
[vba]
Code
Public Sub www() Dim r As Range: Set r = Range("d2", [d65536].End(xlUp)) r.Value = Evaluate(r.Offset(, 14).Address & "&""/""&" & _ r.Address & "&""/""&" & r.Offset(, 1).Address) [E:E,Q:Q].Delete End Sub
Так у Вас в Q ведь пусто Если делать в Экселе - то код KuklP легко переделать и под такое условие. Ну а мой будет немного сложнее изменить - из середины взять данные не сложно, сложнее потом остатки собрать. Но тоже решаемо.
Так у Вас в Q ведь пусто Если делать в Экселе - то код KuklP легко переделать и под такое условие. Ну а мой будет немного сложнее изменить - из середины взять данные не сложно, сложнее потом остатки собрать. Но тоже решаемо.Hugo
Ну конечно - даблклик и готово Не нужно открывать файл в Экселе, искать в персонале (которого вероятно нет) код, или копипастить его в модуль, выполнять, сохранять файл (ещё не известно, что там сохранится в общем случае).
Ну конечно - даблклик и готово Не нужно открывать файл в Экселе, искать в персонале (которого вероятно нет) код, или копипастить его в модуль, выполнять, сохранять файл (ещё не известно, что там сохранится в общем случае).Hugo
Так у Вас в Q ведь пусто sad Если делать в Экселе - то код KuklP легко переделать и под такое условие. Ну а мой будет немного сложнее изменить - из середины взять данные не сложно, сложнее потом остатки собрать. Но тоже решаемо.
это в прикреплённом файле пусто,т.к. не хотел усложнять задачу,поэтому и перекинул из Q в A,а так в оригинале всё так,как я написал в последнем сообщении...
Quote (Hugo)
Так у Вас в Q ведь пусто sad Если делать в Экселе - то код KuklP легко переделать и под такое условие. Ну а мой будет немного сложнее изменить - из середины взять данные не сложно, сложнее потом остатки собрать. Но тоже решаемо.
это в прикреплённом файле пусто,т.к. не хотел усложнять задачу,поэтому и перекинул из Q в A,а так в оригинале всё так,как я написал в последнем сообщении...libero23
Public Sub www() Dim r As Range: Set r = Range("d2", [d65536].End(xlUp)) r.Value = Evaluate(r.Offset(, 14).Address & "&""/""&" & _ r.Address & "&""/""&" & r.Offset(, 1).Address) [E:E,Q:Q].Delete End Sub
из этого выходит следующее /DIESEL/Jacket 8033089692448/DIESEL/Jacket /DIESEL/Jacket 8033089778302/DIESEL/Jacket /DIESEL/Jacket 8033089780671/DIESEL/Jacket 8033089780657/DIESEL/Jacket 8033089780640/DIESEL/Jacket
что-то странное...цифры откуда взялись,непонятно...и столбец Q удалился,а данных не видно нигде....
Quote (KuklP)
Public Sub www() Dim r As Range: Set r = Range("d2", [d65536].End(xlUp)) r.Value = Evaluate(r.Offset(, 14).Address & "&""/""&" & _ r.Address & "&""/""&" & r.Offset(, 1).Address) [E:E,Q:Q].Delete End Sub
из этого выходит следующее /DIESEL/Jacket 8033089692448/DIESEL/Jacket /DIESEL/Jacket 8033089778302/DIESEL/Jacket /DIESEL/Jacket 8033089780671/DIESEL/Jacket 8033089780657/DIESEL/Jacket 8033089780640/DIESEL/Jacket
что-то странное...цифры откуда взялись,непонятно...и столбец Q удалился,а данных не видно нигде....libero23
Public Sub www() Dim r As Range: Set r = Range("d2", [d65536].End(xlUp)) r.Value = Evaluate(r.Offset(, 13).Address & "&""/""&" & _ r.Address & "&""/""&" & r.Offset(, 1).Address) [E:E,Q:Q].Delete End Sub
[/vba]
Так? [vba]
Code
Public Sub www() Dim r As Range: Set r = Range("d2", [d65536].End(xlUp)) r.Value = Evaluate(r.Offset(, 13).Address & "&""/""&" & _ r.Address & "&""/""&" & r.Offset(, 1).Address) [E:E,Q:Q].Delete End Sub