用于合并.csv数据的VBA代码

时间:2016-08-19 18:30:15

标签: excel vba

我正在尝试从许多csv文件中整合特定的日期范围。我想要做的是选择此范围并将其粘贴到单独的工作簿中的主工作表中。 .csv文件全部排列在一个文件夹中,并且所有文件都有相同格式的1张。范围可以是动态的,因此此代码需要能够选择单元格下方的所有行,或者能够从较大范围中删除空白行。我将不胜感激任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

我过去曾经使用过类似的批处理文件。如果再次运行批处理文件,此代码不会处理删除Aggregate.csv。

@ECHO OFF  
Set loc=C:\Test\
Copy %loc%*.csv %loc%\Aggregate.csv

在Excel中,您可以删除所有标题行并使用VBA过滤日期范围。您还可以使用VBA的Shell方法与Copy进行聚合。

编辑: 您还可以在其他数据源中创建数据源> MS Query以使用日期范围等查询带有Microsoft文本驱动程序的Aggregate.csv

答案 1 :(得分:0)

如何解决问题的一些指示:

首先,使用FileSystemObject枚举文件。

Set fso = CreateObject("Scripting.FileSystemObject")
set fld = fso.GetFolder("path\to\my\folder")
For Each file in fld.Files
    If file.Name Like "*.csv" Then LoadFile file.Name
Next

fsofldfile声明为ObjectLoadFile将是您必须编写的函数,它处理单个文件。它看起来大致如下:

Sub LoadFile(filename as String)
    dim buffer() as variant
    dim wb as workbook, ws as worksheet
    dim i as Long, beginrow as long, endrow as long

    Set wb = Workbooks.Open(filename)
    Set ws = wb.Worksheets(1)  ' .csv always has 1 worksheet
    buffer = ws.Range("A1:A10000")  ' put a sensible upper bound here
    for i = 1 to 10000
         ' replace (..first..) and (..last..) with your search interval
         if buffer(i, 1) <= (..first..) Then beginrow = i
         if buffer(i, 1) < (..last..) Then endrow=i
    next
    ' now beginrow and endrow hold the interval to cut
    ws.Cells(beginrow, 1).Resize(endrow-beginrow+1, column_count).Copy destination:=(... to be determined ..)
    wb.Close
End Sub

该功能打开文件;然后在第一列中搜索要复制的间隔;然后复制单元格并关闭文件。

代码不能按原样运行,但希望能给你正确的想法。