VBA复制并粘贴跳过第一行的数据

时间:2017-07-07 14:18:42

标签: excel vba csv file-read

我有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 |值2 | ...... | 0 | aaaa | 1 | 2 | ...... | 1 | bbbb | 3 | 4 | ...... | 2 | cccc | 5 | 6 | ...

和data2.csv看起来像是 | ID |名称| VAL1 |值2 | ...... | 3 | dddd | 7 | 8 | ...... | 4 | eeee | 9 | 9 | ...... | 5 | ffff | 7 | 5 | ...

然后,组合的tempOut.csv应该看起来像
| ID |名称| VAL1 |值2 | ...... | 0 | aaaa | 1 | 2 | ...... | 1 | bbbb | 3 | 4 | ...... | 2 | cccc | 5 | 6 | ...... | 3 | dddd | 7 | 8 | ...... | 4 | eeee | 9 | 9 | ...... | 5 | ffff | 7 | 5 | ...

1 个答案:

答案 0 :(得分:0)

您需要跟踪存在的第一个文件以及文件中的位置,因此请在下面的代码中添加变量“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