Избегайте цикла при работе с Excel в блокноте

Я использую приведенный ниже код, чтобы скопировать некоторый диапазон от excel до notepad. Но он очень медленный, когда я работаю более 1 lakh (100 000) данных. Есть ли более короткий способ достичь этого, не используя метод отправки ключей.

Sub PrintToTextFile() Dim FileNum As Integer, cl As Range, z As Integer, y As Integer Dim myStr As String FileNum = FreeFile ' next free filenumber 'Open "C:\Temp\TEXTFILE.TXT" For Output As #FileNum ' creates the new file Open "C:\temp\TEXTFILE.TXT" For Append As #FileNum Print #FileNum, [a1] z = 10 For Each cl In [b1:b123400] y = cl.Row If y = z Then myStr = myStr & "|" & cl 'appends the input to an existing file write to the textfile Else: Print #FileNum, myStr z = cl.Row myStr = "": myStr = myStr & "|" & cl End If Next 'appends the input to an existing file write to the textfile Print #FileNum, myStr Close #FileNum ' close the file End Sub 

ИСКЛЮЧАЕМЫЙ И ИСПЫТАН с (1,5 лакша, т.е. 150 000 строк) – Время, затраченное на 1 секунду

Это должно быть быстрее, так как оно не проходит через ячейки и не записывает в файл одновременно. Он использует массив.

 Sub PrintToTextFile() Dim ws As Worksheet Dim FileNum As Integer, z As Long, y As Long, i As Long Dim myStr As String Dim Myar, ArOutput() As String '~~> Set this to the relevant sheet Set ws = ThisWorkbook.Sheets("Sheet1") Myar = ws.Range("b1:b123400").Value FileNum = FreeFile ' next free filenumber Open "C:\temp\TEXTFILE.TXT" For Append As #FileNum Print #FileNum, ws.Range("A1").Value z = 10 For i = LBound(Myar) To UBound(Myar) If i = z Then myStr = myStr & "|" & Myar(i, 1) Else ReDim Preserve ArOutput(y) ArOutput(y) = myStr y = y + 1 z = i myStr = "": myStr = myStr & "|" & Myar(i, 1) End If Next i For i = LBound(ArOutput) To UBound(ArOutput) Print #FileNum, ArOutput(i) Next i 'appends the input to an existing file write to the textfile Print #FileNum, myStr Close #FileNum ' close the file End Sub 

Скриншот

введите описание изображения здесь

Код, используемый для тестирования выше.

 Sub PrintToTextFile() Dim ws As Worksheet Dim FileNum As Integer, z As Long, y As Long, i As Long Dim myStr As String Dim Myar, ArOutput() As String Debug.Print "Process Started at " & Now '~~> Set this to the relevant sheet Set ws = ThisWorkbook.Sheets("Sheet1") Myar = ws.Range("B1:B150000").Value FileNum = FreeFile ' next free filenumber Open "C:\temp1\TEXTFILE.TXT" For Output As #FileNum Print #FileNum, ws.Range("A1").Value z = 10 For i = LBound(Myar) To UBound(Myar) If i = z Then myStr = myStr & "|" & Myar(i, 1) Else ReDim Preserve ArOutput(y) ArOutput(y) = myStr y = y + 1 z = i myStr = "": myStr = myStr & "|" & Myar(i, 1) End If Next i For i = LBound(ArOutput) To UBound(ArOutput) Print #FileNum, ArOutput(i) Next i 'appends the input to an existing file write to the textfile Print #FileNum, myStr Close #FileNum ' close the file Debug.Print "Process ended at " & Now End Sub 
Interesting Posts

Msgstr "Неверная ссылка Следующая ссылка на переменную" Ошибка в excel vba

Определение того, какие ячейки покрыты одной непрерывной матричной формулой

VBA Macro: пытается ввести код «если две ячейки одинаковы, тогда ничего, иначе сдвиньте строки вниз»,

Обход безопасности Outlook при отправке электронной почты через макрос Excel

Excel ищет строку и сколько раз в ячейке находится символ

Поиск строки в одном листе и обновление ячейки на другом листе

как выбирать строки по другому столбцу

как проверить, защищен ли пароль от файла excel с помощью jxl

Отремонтированные записи: информация соты из листа, созданного с нуля

Отсутствует свойство Excel VBA «AxisBetweenCategories» в ChartSpace

Excel VBA – поиск строки на листе

Как вернуть ответ как файл excel с помощью dropwizard?

Ошибка времени выполнения VBA 1004 – Недопустимый диапазон объекта_Global – IF Formula

Простые ячейки Coldfusion Spreadsheet

Как автоматически защитить отдельные листы в Excel с помощью VBA?

Давайте будем гением компьютера.