您首先必须使用lRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
才能获得第一个空行,而不是最后一个填充行;
我有两个.txt文件。它们具有完全相同的格式和列。
第一个.txt文件如下所示:
这是我用来将数据从第一个.txt文件导出到Excel工作表(由@FaneDuru共享)的VBA代码)>
Sub CopyLessColumns() Dim strSpec As String, i As Long, colToRet As Long Dim arrSp As Variant, arrRez() As String, arrInt As Variant, j As Long Dim fso As Object, txtStr As Object, strText As String Set fso = CreateObject("Scripting.FileSystemObject") strSpec = "C:\Users\xxxxxxxxx\Desktop\Input.txt" If Dir(strSpec) <> "" Then Set txtStr = fso.OpenTextFile(strSpec) strText = txtStr.ReadAll txtStr.Close End If arrSp = Split(strText, vbCrLf) colToRet = 5 'Number of columns you need ReDim arrRez(UBound(arrSp), colToRet - 1) For i = 0 To UBound(arrSp) arrInt = Split(arrSp(i), vbTab) If UBound(arrInt) > colToRet - 1 Then For j = 0 To colToRet - 1 arrRez(i, j) = arrInt(j) Next j End If Next i ActiveSheet.Range(Cells(1, 1), Cells(UBound(arrRez, 1) + 1, UBound(arrRez, 2) + 1)).Value = arrRez End Sub
运行上面的代码后,我的Excel工作表将如下所示:
但是我不确定如何将第二个.txt文件中的数据附加到现有电子表格中。
下面是我的第二个.txt文件。相同格式,相同列号,不同数据。
我想将第二个.txt文件中的数据追加到我的电子表格中,因此看起来像这样
您可以看到,当我导入第二个.txt文件时,我想跳过标题行,而直接将数据导入到第一行下面。
此外,第一个.txt文件的行号可以随时更改,因此我不能只使用完全相同的代码,而只需将最后一行更改为
ActiveSheet.Range(Cells(2, 1), Cells(UBound(arrRez, 1) + 1, UBound(arrRez, 2) + 1)).Value = arrRez
to
ActiveSheet.Range(Cells(4, 1), Cells(UBound(arrRez, 1) + 1, UBound(arrRez, 2) + 1)).Value = arrRez
我也试图通过使用]查找最后一行。
lRow = Cells(Rows.Count, 1).End(xlUp).Row
然后,将最后一行更改为
ActiveSheet.Range(Cells(lRow, 1), Cells(UBound(arrRez, 1) + 1, UBound(arrRez, 2) + 1)).Value = arrRez
但是那也不起作用。它只会用第二个.txt文件中的标题行覆盖电子表格上现有数据的最后一行]
我试图在线查找,但没有找到与我在这里尝试的相似的东西,因此,任何评论都将不胜感激!
----------------------------------------最终答案------ -------------------
基于@FaneDuru的出色建议编写的代码的最终版本
Sub PartTwo() Dim strSpec As String, i As Long, colToRet As Long Dim arrSp As Variant, arrRez() As String, arrInt As Variant, j As Long Dim fso As Object, txtStr As Object, strText As String Dim lRow As Integer Set fso = CreateObject("Scripting.FileSystemObject") strSpec = "C:\Users\ygong25\Desktop\Input2.txt" If Dir(strSpec) <> "" Then 'check if file exists Set txtStr = fso.OpenTextFile(strSpec) strText = txtStr.ReadAll txtStr.Close End If arrSp = Split(strText, vbCrLf) colToRet = 5 'Number of columns you need ReDim arrRez(UBound(arrSp), colToRet - 1) For i = 0 To UBound(arrSp) arrInt = Split(arrSp(i), vbTab) If UBound(arrInt) > colToRet - 1 Then For j = 0 To colToRet - 1 arrRez(i, j) = arrInt(j) Next j End If Next i lRow = Cells(Rows.Count, 1).End(xlToLeft).Column ActiveSheet.Range(Cells(lRow, 1), Cells(UBound(arrRez, 1) + 1, UBound(arrRez, 2) + 1)).Value = arrRez End Sub
我有两个.txt文件。它们具有完全相同的格式和列。第一个.txt文件如下所示:这是我用来将数据从第一个.txt文件导出到excel的VBA代码...
您首先必须使用lRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
才能获得第一个空行,而不是最后一个填充行;
然后,您必须以跳过标题的方式修改arrRez
数组:
ReDim arrRez(1 To UBound(arrSp), colToRet - 1)
后跟
For i = 1 To UBound(arrSp)
代替
For i = 0 To UBound(arrSp)
最后,正确准备要删除数组数据的范围:
ActiveSheet.Range(Cells(lastR, 1), Cells(UBound(arrRez, 1) + lastR - 1, UBound(arrRez, 2) + 1)).Value = arrRez
您首先必须使用lRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
才能获得第一个空行,而不是最后一个填充行;