我想从许多csv文件合并一个特定的日期范围。我想要做的是选择这个范围,并将其粘贴到一个单独的工作簿中的主表。 .csv文件全部排列在一个文件夹中,并且全都有1张格式相同的文件。范围可以是动态的,所以这段代码需要能够选择单元格下的所有行,或者能够从更大的范围中删除空行。我将不胜感激任何帮助。VBA代码来巩固.csv数据
感谢
我想从许多csv文件合并一个特定的日期范围。我想要做的是选择这个范围,并将其粘贴到一个单独的工作簿中的主表。 .csv文件全部排列在一个文件夹中,并且全都有1张格式相同的文件。范围可以是动态的,所以这段代码需要能够选择单元格下的所有行,或者能够从更大的范围中删除空行。我将不胜感激任何帮助。VBA代码来巩固.csv数据
感谢
我用一个批处理文件,在过去这样的事情。如果批处理文件再次运行,此代码不处理删除Aggregate.csv。
@ECHO OFF
Set loc=C:\Test\
Copy %loc%*.csv %loc%\Aggregate.csv
一旦进入Excel,您可以删除所有标题行并使用VBA过滤日期范围。您还可以使用VBA的Shell方法与Copy进行聚合。
编辑: 您也可以以查询Aggregate.csv使用微软文本驱动程序的日期范围创建其他数据源> MS查询数据源等
一些指点如何去解决方案:
首先,使用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
声明fso
,fld
,file
为Object
。 LoadFile
将是您必须编写的函数,它处理单个文件。它看起来大致是这样的:
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
该函数打开文件;然后在第一列中搜索要复制的时间间隔;然后复制单元格并关闭文件。
该代码不能按原样运行,但应该希望能给您正确的想法。
1.使用数据记录自己►获取外部数据►从文本开始,然后检查代码以了解如何转换为自动循环。 2.如果您遇到麻烦,请回过头来编辑您的问题以包括您自己的努力。 – Jeeped