2016-08-19 4 views
-1

Я пытаюсь консолидировать определенный диапазон дат из многих файлов csv. Я хочу сделать это, чтобы выбрать этот диапазон и вставить его в мастер-лист в отдельной книге. Файлы .csv расположены в одной папке, и все они имеют один лист в том же формате. Диапазон может быть динамическим, поэтому этот код должен будет иметь возможность выбирать все строки под ячейкой или удалять пустые строки из большего диапазона. Буду признателен за любую помощь.Код VBA для консолидации данных .csv

Благодаря

+3

1. Запишите себя, используя данные ► Получить внешние данные ► Из текста затем просмотрите код, чтобы посмотреть, как превратиться в автоматический цикл. 2. Вернитесь и отредактируйте свой вопрос, чтобы включить свои усилия, если у вас возникнут проблемы. – Jeeped

ответ

0

Я использовал пакетный файл, чтобы что-то подобное в прошлом. Этот код не обрабатывает удаление Aggregate.csv, если пакетный файл снова запущен.

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

В Excel вы можете удалить все строки заголовков и диапазоны дат фильтра с помощью VBA. Вы также можете использовать метод Shell VBA для агрегирования с помощью Copy.

Edit: Вы также можете создать источник данных в других источниках данных> MS Query для того, чтобы запросить Aggregate.csv с Microsoft Text Driver с использованием диапазонов дат и т.д.

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 

Объявить 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 

Функция открывает файл; затем ищет первый столбец для копируемого интервала; затем копирует ячейки и закрывает файл.

Код не может быть выполнен как есть, но мы надеемся дать вам правильные идеи.