我有下一個問題,我需要將約127,000行的excel文件與大約1'500,000行的文本文件進行比較。文本文件中的每一行都被八個管道分開,在Excel中有8列。我需要在文本行中的第五列與我的Excel文件中的特定列做一個VLookUp。從文本文件導入大數據到Excel
我一直在做的是:
- 我坐第一排的我的excel文件,我看它在文本文件中,我只導入線,然後我適合行了在excel中的相應列,最後我做了VLookUp。
Sub test()
Dim textline As String, rw As Long, lRow As Long, rw1 As Long
Dim sPath As String, text As Variant
rw1 = 1
sPath = "My_path"
With ActiveWorkbook.Sheets("Sheet1")
For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
text = range("A" & rw).Value2
Open sPath For Input As #1
Do Until EOF(1)
Line Input #1, textline
If InStr(textline, CStr(text)) Then
Sheets(2).Cells(rw1, 1) = textline
Sheets(2).range("A" & rw1).TextToColumns Destination:=range("A" & rw1 & ":H" & rw1), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="|", TrailingMinusNumbers:=True
rw1 = rw1 + 1
Exit Do
End If
Loop
Close #1
Next rw
End With
End Sub
- 我導入所有的文本文件到Excel,然後我適合線在各自的列,並在端我做VLOOKUP。
Sub test()
Dim textline As String, rw As Long, lRow As Long, rw1 As Long
Dim sPath As String, text As Variant, sh As String, c As Integer
sh = "Sheet"
c = 1
rw = 1
rw1 = 1
sPath = "My_path"
With ActiveWorkbook.Sheets("Sheet1")
Open sPath For Input As #1
Do Until EOF(1)
Line Input #1, textline
Sheets("Sheet1").range("A" & rw) = textline
Exit Do
End If
rw = rw + 1
Loop
Close #1
End With
With ActiveWorkbook.Sheets(1)
For rw1 = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Sheet1").range("A" & rw1).TextToColumns Destination:=range("A" & rw1 & ":H" & rw1), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="|", TrailingMinusNumbers:=True
Next rw1
End With
End Sub
Now
的問題是,這兩種方法花費的時間太長,沒有人知道一個更好的解決方案,可以幫助我嗎?
感謝您的建議
[性能](https://fastexcel.wordpress.com/2011/10/26/match-vs-find-vs-variant-array-vba-performance-shootout/)與[變體數組] (https://stackoverflow.com/questions/23868137/which-the-fastest-way-to-sum-two-range/23869738#23869738)而不是範圍。 – danieltakeshi
使用'Split(textline,「|」)'獲取一個數組的數組可能會比使用TextToColumns更快。其他改進可能取決於(例如)匹配的字段在工作表和/或文本文件中是唯一的 –
好主意Tim,謝謝。我猜想,而不是數組我會使用一個矩陣使用相同的變體數組的概念。最好的問候 –