VBA 跳过第一行复制和粘贴数据
VBA Copy and paste data skipping the first row
我有 40 个格式相同的 excel 数据文件 (data1.csv ~ data40.csv)。我正在尝试根据从这 40 个文件中读取的所有数据生成一个图表。
我的想法是,创建一个新的临时 .csv 文件 (tempOut.csv),我将从每个文件读取的所有数据依次复制并粘贴到其中,最后使用该临时文件中的数据生成图表.
问题是,每个文件都有标题行,如 (ID, name, val1, val2,)。当我从每个文件复制数据时,我需要删除这一行,或者完全跳过这一行并复制,然后将其粘贴到临时 .csv 文件中,第一个文件除外。
如何使用我编写的代码实现这一点?
这是我的代码:
Dim thisFile As String 'input file name
Dim outFile As String 'output file name
Dim dataRead As String 'containing data copied and pasted
outFile = "tempOut.csv"
Open outFile For Output As #1
For i = 1 To 40
thisFile = "C:\datafolder\data" + CStr(i) + ".csv"
Open thisFile For Input As #2
Do Until EOF(2) 'read until the end of the file
Line Input #2, dataRead
Print #1, dataRead
Loop
Close #2
Next i
Close #1
此代码确实会创建一个新文件,并按顺序复制并粘贴每个文件中的所有数据。但是,每次,它也会复制并粘贴标题行。我添加了 if 语句,当 i = 1 时,它会读取所有内容。但是我不太确定如何跳过第一行进行复制,从第二个文件读取到最后一个文件。
谁能帮我解决这个问题?提前谢谢你。
添加:
例如,data1.csv 看起来像
|ID|名称|Val1|Val2| ...
|0 |啊啊| 1』| 2』| ...
|1 |bbbb| 3》| 4』| ...
|2 |cccc| 5』| 6』| ...
和 data2.csv 看起来像
|ID|名称|Val1|Val2| ...
|3 |dddd| 7』| 8』| ...
|4 |eeee| 9』| 9』| ...
|5 |ffff| 7』| 5』| ...
然后,合并后的 tempOut.csv 应该看起来像
|ID|名称|Val1|Val2| ...
|0 |啊啊| 1』| 2』| ...
|1 |bbbb| 3》| 4』| ...
|2 |cccc| 5』| 6』| ...
|3 |dddd| 7』| 8』| ...
|4 |eeee| 9』| 9』| ...
|5 |ffff| 7』| 5』| ...
您需要跟踪存在的第一个文件以及您在文件中的位置,因此添加变量 "j" 和 "k",如下面的代码所示:
Dim thisFile As String 'input file name
Dim outFile As String 'output file name
Dim dataRead As String 'containing data copied and pasted
outFile = "tempOut.csv"
Open outFile For Output As #1
k = 0
For i = 1 To 40
thisFile = "C:\datafolder\data" + CStr(i) + ".csv"
Open thisFile For Input As #2
j = 0
Do Until EOF(2) 'read until the end of the file
If k = 0 Then k = i
j = j + 1
Line Input #2, dataRead
If i = k Or (i > k And j > 1) Then
Print #1, dataRead
End If
Loop
Close #2
Next i
Close #1
我有 40 个格式相同的 excel 数据文件 (data1.csv ~ data40.csv)。我正在尝试根据从这 40 个文件中读取的所有数据生成一个图表。 我的想法是,创建一个新的临时 .csv 文件 (tempOut.csv),我将从每个文件读取的所有数据依次复制并粘贴到其中,最后使用该临时文件中的数据生成图表.
问题是,每个文件都有标题行,如 (ID, name, val1, val2,)。当我从每个文件复制数据时,我需要删除这一行,或者完全跳过这一行并复制,然后将其粘贴到临时 .csv 文件中,第一个文件除外。
如何使用我编写的代码实现这一点? 这是我的代码:
Dim thisFile As String 'input file name
Dim outFile As String 'output file name
Dim dataRead As String 'containing data copied and pasted
outFile = "tempOut.csv"
Open outFile For Output As #1
For i = 1 To 40
thisFile = "C:\datafolder\data" + CStr(i) + ".csv"
Open thisFile For Input As #2
Do Until EOF(2) 'read until the end of the file
Line Input #2, dataRead
Print #1, dataRead
Loop
Close #2
Next i
Close #1
此代码确实会创建一个新文件,并按顺序复制并粘贴每个文件中的所有数据。但是,每次,它也会复制并粘贴标题行。我添加了 if 语句,当 i = 1 时,它会读取所有内容。但是我不太确定如何跳过第一行进行复制,从第二个文件读取到最后一个文件。
谁能帮我解决这个问题?提前谢谢你。
添加:
例如,data1.csv 看起来像
|ID|名称|Val1|Val2| ...
|0 |啊啊| 1』| 2』| ...
|1 |bbbb| 3》| 4』| ...
|2 |cccc| 5』| 6』| ...
和 data2.csv 看起来像
|ID|名称|Val1|Val2| ...
|3 |dddd| 7』| 8』| ...
|4 |eeee| 9』| 9』| ...
|5 |ffff| 7』| 5』| ...
然后,合并后的 tempOut.csv 应该看起来像
|ID|名称|Val1|Val2| ...
|0 |啊啊| 1』| 2』| ...
|1 |bbbb| 3》| 4』| ...
|2 |cccc| 5』| 6』| ...
|3 |dddd| 7』| 8』| ...
|4 |eeee| 9』| 9』| ...
|5 |ffff| 7』| 5』| ...
您需要跟踪存在的第一个文件以及您在文件中的位置,因此添加变量 "j" 和 "k",如下面的代码所示:
Dim thisFile As String 'input file name
Dim outFile As String 'output file name
Dim dataRead As String 'containing data copied and pasted
outFile = "tempOut.csv"
Open outFile For Output As #1
k = 0
For i = 1 To 40
thisFile = "C:\datafolder\data" + CStr(i) + ".csv"
Open thisFile For Input As #2
j = 0
Do Until EOF(2) 'read until the end of the file
If k = 0 Then k = i
j = j + 1
Line Input #2, dataRead
If i = k Or (i > k And j > 1) Then
Print #1, dataRead
End If
Loop
Close #2
Next i
Close #1