2016-08-19 35 views
-1

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

感谢

+3

1.使用数据记录自己►获取外部数据►从文本开始,然后检查代码以了解如何转换为自动循环。 2.如果您遇到麻烦,请回过头来编辑您的问题以包括您自己的努力。 – Jeeped

回答

0

我用一个批处理文件,在过去这样的事情。如果批处理文件再次运行,此代码不处理删除Aggregate.csv。

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

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

编辑: 您也可以以查询Aggregate.csv使用微软文本驱动程序的日期范围创建其他数据源> MS查询数据源等

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 

声明fsofldfileObjectLoadFile将是您必须编写的函数,它处理单个文件。它看起来大致是这样的:

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 

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

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