2016-08-19 4 views
-1

多くのcsvファイルから特定の日付範囲を統合しようとしています。私がしたいのは、この範囲を選択して別のワークブックのマスターシートに貼り付けることです。 .csvファイルはすべて1つのフォルダに配置され、すべて同じフォーマットで1枚あります。範囲は動的であるため、このコードでは、セルの下にあるすべての行を選択したり、より大きな範囲から空白行を削除できるようにする必要があります。助けていただければ幸いです。.csvデータを統合するためのVBAコード

ありがとうございました

+3

1.データ►外部データの取得►テキストから自分自身を記録し、コードを調べて自動ループに切り替える方法を確認します。 2.問題に遭遇した場合は、元に戻って自分の質問を編集して自分の努力を含める。 – Jeeped

答えて

0

私は過去にこのようなものにバッチファイルを使用しました。バッチファイルが再度実行された場合、このコードはAggregate.csvの削除を処理しません。

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

Excelでは、VBAを使用してすべてのヘッダー行とフィルタ日付範囲を削除できます。 VBAのShellメソッドを使用して、コピーで集約することもできます。

編集: ます。また、日付範囲を使用して、Microsoftテキストドライバーで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 

Objectとしてfsofldfileを宣言します。 LoadFileは、1つのファイルを処理する書き込み関数です。次のようになります。

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 

この関数はファイルを開きます。最初の列を検索してコピーする間隔を探します。セルをコピーしてファイルを閉じます。

コードはそのままでは実行できませんが、適切なアイデアが得られるはずです。

関連する問題