避免循环,而使用Excel记事本

我使用下面的代码来复制一些范围从Excel到记事本。但是,当我工作超过10万(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 Lakhs即150,000行)testing – 时间采取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 

截图

在这里输入图像说明

用于上述testing的代码。

 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