我有下一个问题,我需要将约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,谢谢。我猜想,而不是数组我会使用一个矩阵使用相同的变体数组的概念。最好的问候 –