Страницы: 1
RSS
Объединение нескольких книг по след принципу.
 
День добрый.  
 
Знатоки подскажите как можно решить нормаль и правильно задачу.  
Имеем кучу книг штук скажем 400 с одинаковым шаблоном ,то есть внутри каждого документа имеется таблица с разными данными клиентов, находится она только в Лист1, а выше и ниже таблички имеем ненужную инфу (одинаковую) пример такого документа прикрепил.  
 
Дальше, количество клиентов в таблице разное, может быть один , а может 20 тыс.  
 
И так задача склеить все книги в одну но при этом что бы клеилось только таблица с клиентами. Я решил задачу, но через задницу, хотелось бы узнать как можно правильно это сделать.  
 
мое решение:  
 
1)    
Sub makr1()  
   Dim myName As String, Wb As Workbook  
   
   myName = Dir("c:\in\" & "*.xlsx")  
   With ThisWorkbook.Sheets(1)  
       Do While myName <> ""  
           Set Wb = Workbooks.Open(Filename:="c:\in\" & myName)  
           ActiveSheet.UsedRange.Copy .Cells(.UsedRange.Rows.Count + .UsedRange.Row, "A")  
           Wb.Close SaveChanges:=False  
           myName = Dir  
       Loop  
   End With  
 
MsgBox ("Выполнено")  
 
End Sub  
---------------------------------  
дальше получив книгу со всеми данными начал их фильтровать, а имеено заменять шаблонные надписи в первом столбце на пустые ячейки, что б дальше их грохнуть (напомню пример в приложении)  
2)  
 
Sub Makr2()  
'  
   Cells.Replace What:="Чуш", Replacement:="", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
 
   Cells.Replace What:="что то еще", Replacement:="", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
 
 Cells.Replace What:="Одобрено Мин-чемто", Replacement:="", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
 
 Cells.Replace What:="Код клиента", Replacement:="", LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
 
End Sub  
-----------------  
А дальше убил все рядки в которых ячейка с первого столбца пустая  
 
3)  
 
Sub DeleteEmptyRowsColumns()  
LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count  
Application.ScreenUpdating = False  
For r = LastRow To 1 Step -1  
If Application.Rows®.Columns(1).Value = "" Then Rows®.Delete  
Next r  
End Sub  
--------------------  
 
Одним словом кто знает помогите сделать так что б данные объединялись начиная след рядка после ключевой ячейки "Код клиента" и до первой пустой ячейки.. а дальше начиналась выборка по другой книге точно также... и т.д.
 
Не совсем понятно расположение данных, но если нет разрывов в данных, то определить последнюю заполненную можно так.  
endRow = Range("A6").End(xlDown).Row  
Если же начало данных тоже "гуляет" то используем Find(Код клиента")
 
{quote}{login=Igor67}{date=19.12.2012 03:44}{thema=}{post}Не совсем понятно расположение данных, но если нет разрывов в данных, то определить последнюю заполненную можно так.  
endRow = Range("A6").End(xlDown).Row  
Если же начало данных тоже "гуляет" то используем Find(Код клиента"){/post}{/quote}  
 
Тьфу и правда. переделал в одно действие.    
 
Sub makr1()  
Dim myName As String, Wb As Workbook  
 
myName = Dir("c:\in\" & "*.xlsx")  
With ThisWorkbook.Sheets(1)  
Do While myName <> ""  
Set Wb = Workbooks.Open(Filename:="c:\in\" & myName)  
endRow = Range("A7").End(xlDown).Row  
ActiveSheet.Range("A7:H" & endRow).Copy .Cells(.UsedRange.Rows.Count + .UsedRange.Row, "A")  
Wb.Close SaveChanges:=False  
myName = Dir  
Loop  
End With  
 
MsgBox ("Выполнено")  
 
End Sub  
 
Спасибо
 
Я бы не полагался на милость UsedRange. Всякое бывало... Куда копировать - можно ведь высчитать, если лень каждый раз определять. Сколько копируем ведь известно.  
В открываемых файлах всегда один лист? Если не один - не боитесь, что книгу сохранят с другим активным листом?
 
{quote}{login=Hugo}{date=20.12.2012 12:27}{thema=}{post}Я бы не полагался на милость UsedRange. Всякое бывало... Куда копировать - можно ведь высчитать, если лень каждый раз определять. Сколько копируем ведь известно.  
В открываемых файлах всегда один лист? Если не один - не боитесь, что книгу сохранят с другим активным листом?{/post}{/quote}  
 
В моем случае всегда один лист и с одним и тем же именем. И по шаблону одному и тому же. меняется только количество сток самой таблици.
Страницы: 1
Наверх