2016-08-19 34 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 

該函數打開文件;然後在第一列中搜索要複製的時間間隔;然後複製單元格並關閉文件。

該代碼不能按原樣運行,但應該希望能給您正確的想法。