我使用下面的代码将一些范围从excel复制到记事本。但是当我处理超过1万(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
答案 0 :(得分:2)
测试和测试(1.5 Lakhs,即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