Страницы: 1
RSS
Копирование данных из одних и тех же ячеек разных файлов и формирование одной таблицы из них.
 
Подскажите пожалуйста.  
Копирование данных из одних и тех же ячеек разных файлов и формирование одной таблицы из них. Например, у меня есть тысячу файлов xls с разными названиями но с одинаковой структурой, в ячейках А1 и В2 и С4 есть текст, который мне нужно по порядку укладывать в новую таблицу (А1 из файла ---> А1 в новой таблице, В2 из файла ---> В1 в таблице, С4 ---> С3, соответственно А1 из следующего файла становится А2 в таблице, В2 из файла --->В2, С4 ---> С2. То есть из данных файлов формировать список в таблице. Каждый файл, из которого нужно скопировать данные в таблицу могу открывать вручную. Есть ли возможность указать в макросе диапазон названий файлов из которых нужно скопировать информацию если да, то супер, если нет то вручную? Спасибо.
 
Пробуйте  
 
Sub serbius()  
Dim arFiles, x, c As Range  
 
arFiles = Application.GetOpenFilename("Файлы Excel, *.xl*", , "Выберите файлы", , True)  
If Not IsArray(arFiles) Then Exit Sub  
Application.ScreenUpdating = False  
Set c = Workbooks.Add(xlWBATWorksheet).Sheets(1).Range("A1:C1")  
For Each x In arFiles  
   With Workbooks.Open(x, ReadOnly:=True)  
       c.Value = Array(Range("A1"), Range("B2"), Range("C4"))  
       Set c = c.Offset(1)  
       .Close 0  
   End With  
Next  
Application.ScreenUpdating = True  
End Sub
 
Спасибо большое за ответ Казанский! Я вот на этом форуме нарыл такой макрос, который исполняет задание без открытия каждого нового файла вручную, можете объединить Ваш макрос и вот этот,?  
 
Attribute VB_Name = "Module1"  
Option Explicit  
 
Sub CollectInfo()  
Dim BazaWb As Workbook 'текущая книга (общий файл)  
Dim BazaSht As Worksheet 'лист Price-group в общем файле  
Dim iTempFileName As String 'имя поочерёдно открываемого файла  
Dim iPath As String 'путь к папке, где лежат все файлы  
Dim iLastRowBaza As Long 'последняя заполненная строка в общем файле в столбце C  
Dim iLastRowTempWb As Long 'последняя заполненная строка в по-очерёдно открываемом файле в столбце C  
Dim iNumFiles As Long 'количество открываемых файлов  
 
   With Application  
       .ScreenUpdating = False  
       .DisplayAlerts = False  
       .Calculation = xlManual  
       Set BazaWb = ThisWorkbook  
       Set BazaSht = BazaWb.Sheets("Price-group")  
       iPath = BazaWb.Path & "\"  
       iTempFileName = Dir(iPath & "*.xls")  
       Do While iTempFileName <> ""  
           If iTempFileName <> BazaWb.Name Then  
               With .Workbooks.Open _  
                    (Filename:=iPath & iTempFileName, UpdateLinks:=False, ReadOnly:=True)  
                    iNumFiles = iNumFiles + 1  
                    'Рабочая книга не должна быть защищена паролем  
                    With .Worksheets(1)  
                         iLastRowTempWb = .Cells(Rows.Count, 3).End(xlUp).Row  
                         iLastRowBaza = BazaSht.Cells(Rows.Count, 3).End(xlUp).Row + 1  
                         .Range(.Cells(9, 1), .Cells(iLastRowTempWb, "P")).Copy Destination:=BazaSht.Cells(iLastRowBaza, 1)  
                    End With  
                    .Close saveChanges:=False  
               End With  
           End If  
           iTempFileName = Dir  
       Loop  
       .Calculation = xlAutomatic  
       .DisplayAlerts = True  
       .ScreenUpdating = True  
   End With  
   MsgBox "Информация собрана из " & iNumFiles & " файлов!", vbInformation, "Конец"  
End Sub  
 
В это макросе каким-то для меня чудным образом, вытаскиваются данные из файлов которые находятся в одной папке, без открытия каждого вручную. Помогите если можете, спасибо.
 
А чем Вам не нравится решение от Казанский-?  
Может Вы не поняли его, или что то при постановке задачи утаили?  
Не поленился, скопировал код, прогнал в пошаговом режиме все корректно.  
В данном варианте решения при открытии диалога выбора файлов Вы можете выбрать с использованием клавиш Shift или Ctrl ВСЕ файлы или отдельные, остальное макрос сделает сам запомнив выбор.  
В решении от Pavel55 - это его макрос, или одна из многих вариаций, файл с макросом должен находится в папке с обрабатываемыми файлами. Т.е. Вам необходимо сначала скопировать все файлы для обработки в одну папку и только потом запустить макрос. Разницы не вижу. Выбирать папку и файлы в процессе работы макроса или сначала через проводник сделать то же самое и запустить обработку.
 
Igor67 здравствуйте, извините я не знал что макрос работает со множеством выбранных файлов. Большое спасибо Казанскому и Вам, пусть Бог вас благословит.
 
То что ищу, но только хочется понять как его доработать, что бы он мог работать не с диапазоном ячеек, а с отдельными ячейками на листе и при этом мог сначала выбирать в открываемой книге (для копирования данных) первый лист. Мне надо копировать в строчку следующие ячейки: D23, D24, D64 и I53. Помогите плиз...
 
Уважаемый форумчанин Казанский, Вы же писали эту формулу, может поможете ее чуток доработать? Заранее благодарю.
 
Так ведь у Казанского так и написано - диапазоны только свои укажите, один добавьте, и готово.  
Ну и лист там берётся тот, который будет активным при открытии - для всегда первого нужно так:  
 
with .sheets(1)  
c.Value = Array(.Range("D23"), .Range("D24"), .Range("D64 "), .Range("I53 "))  
end with  
 
Неужели легче пару дней ждать, чем самому попытаться понять/изменить код?
 
Витамин, можно и доработать, вот только что такое первый лист? как копировать нужные ячейки. Не стесняйтесь, покажите конечную хотелку и несколько файлов исходных. А отсутствие ответа - форум висит, и больше Вам писать чем код править:(
 
{quote}{login=Hugo}{date=14.09.2012 08:15}{thema=}{post}Так ведь у Казанского так и написано - диапазоны только свои укажите, один добавьте, и готово.  
Ну и лист там берётся тот, который будет активным при открытии - для всегда первого нужно так:  
 
with .sheets(1)  
c.Value = Array(.Range("D23"), .Range("D24"), .Range("D64 "), .Range("I53 "))  
end with  
 
Неужели легче пару дней ждать, чем самому попытаться понять/изменить код?{/post}{/quote}  
 
Аааааа.... Секас... Знать бы где чего дописать грамотно, было бы проще. Спасибо Вам огромное.
 
Уважаемый Казанский,  
не могли бы вы в своем коде показать, как сделать, чтобы результат появлялся не в новом файле, а в том, где сам макрос?
Страницы: 1
Читают тему
Наверх