【问题标题】:VBA Copy and paste data skipping the first rowVBA 复制和粘贴数据跳过第一行
【发布时间】:2017-07-07 14:18:41
【问题描述】:

我有 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 |aaaa| 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 |aaaa| 1 | 2 | ...
|1 |bbbb| 3 | 4 | ...
|2 |cccc| 5 | 6 | ...
|3 |dddd| 7 || 8 | ...
|4 |eeee| 9 | 9 | ...
|5 |ffff| 7 || 5 | ...

【问题讨论】:

    标签: excel vba csv file-read


    【解决方案1】:

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

    【讨论】:

    • 谢谢!但是您的代码不是仅将第一个文件“粘贴”到 tempOut.csv 中吗?
    • 不,它将为第一个文件执行所有行,为所有其他文件执行第 2 行及更大的行。试试看。
    • 我没有在那里看到“或”。天哪,这很好用!非常感谢你。多亏了你,我觉得我变得更聪明了。
    • 这个程序很好用,但是你能告诉我如何处理第一个文件(data1.csv)不存在的情况吗?在这种情况下,输出文件将根本没有标题行..
    • 这将需要另一个变量来跟踪存在的第一个文件。我修改了示例代码以允许这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多