Страницы: 1
RSS
Обьеденить данные с разных листов, получение сводной таблицы
 
Здравствуйте ув. "ЭКСЕЛеводы" и эксперты в делах формул и макросов!

Прошу помощи в решении задачи сбора данных с книг: таких книг более 100! в каждой куча информации на первом листе - Лист1- требуется собрать воедино в отдельной книге данные со всех книг, с возможность обновления данных в исходниках и разумеется автоматических обновлением в собранном файле. Таблицы одинаковые, разница только в количестве заполненных строк. пример по ссылке не подходит, в силу сбора данных по разным листам, вызывает ошибки сбора информации и тд..
работать с этим файлом будет женщина! и нужно упростить до "включения чайника" кнопка "ТЫК" (обновить)

ОЧЕНЬ ПРОШУ ПОМОЧЬ!!!
Изменено: Jystas - 18.10.2016 22:15:20
 
Насколько мне известно, в сферах соцзащиты, образования, дошкольного и доп. образования
существует специальное программное обеспечение для подобных целей (АИС и т.п).
Перенесите свои данные туда, и не нужно будет сводных таблиц, и для отчетности всем удобней - и Вам, и проверяющим.
Или у Вас собственная база данных на детей и родителей с Вашими собственными критериями - отдельными от ФГОС и прочих требований к образовательным учреждениям?
Отвечать на эти вопросы не обязательно, если найдутся желающие Вам помочь - помогут.
 
Интересно, к тому же в примере "алфавитная книга"  - есть форма для ввода пароля  :)
"17 мгновений весны" - неумирающее произведение!
 
Как собрать данные с нескольких листов или книг?
 
мне этот вариант  не подходит, смотрел уже.. еще до того как..  
 
Не понятно, зачем нужна форма с вводом пароля?
В поиске наберите "собрать данные с нескольких книг".
Таких собиралочек море. Все книги помещаете в один каталог и поочередно
просматриваете их все с помощью Dir и переносите данные в свою книгу.
 
Цитата
Jystas написал: мне этот вариант  не подходит
Чтобы Вам не предлагали аналогичные решения, объясните - ПОЧЕМУ не подходит.
 
пароль - на защиту всех листов одним кликом, это от любопытных женских глаз, т.к. им не объяснить что формулы и массивы тут для того что бы все работало, а они могут взять и начать вставлять данные просто тупо в те ячейки какие видят, а не куда требуется!

на счет собиралочек - закопался совсем.. с макросами я туговат, да и с формулами не очень, что смог адаптировал,(кстати и про пароль с вашего сайта)

пример по ссылке не подходит, в силу сбора данных по разным листам, вызывает ошибки сбора информации и тд..
работать с этим файлом будет женщина! и нужно упростить до "включения чайника" кнопка "ТЫК" (обновить)  
 
Цитата
на счет собиралочек
Например тема http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=82732
 
тема не плохая, но мне теперь это лопатить долго придется.. попробую..я так понимаю у меня задача гораздо проще..
 
помогите разобраться в чем дело и почему не запускается этот макрос ?
 
Цитата
почему не запускается этот макрос ?
Посмотрите и измените      
Код
  Set BazaSht = BazaWb.Sheets("Лист1")
У вас лист называется Алфавит
Код
   Set BazaSht = BazaWb.Sheets("Алфавит")
А во всех остальных файлах вы работаете с Лист1, поэтому
Код
With .Worksheets("Лист1") 'с конкретным листом в открытой книге
Изменено: Kuzmich - 19.10.2016 23:43:23
 
сказывается позднее время! спасибо.. исправил
 
а есть возможность работать этому макросу по заданной области? т.е. у меня диапазон один и тот же B11:P160, почистить пустые строки я потом смогу другим макросом.
Код
Sub CollectAllClients()
Dim BazaWb As Workbook 'текущая книга (общий файл)
Dim BazaSht As Worksheet 'лист База покупателей в общем файле
Dim iTempFileName As String 'имя по-очерёдно открываемого файла
Dim iPath As String 'путь к папке, где лежат все файлы
Dim iLastRowBaza As Long 'последняя заполненная строка в общем файле в столбце A
Dim iLastRowTempWb As Long 'последняя заполненная строка в по-очерёдно открываемом файле в столбце A
Dim iNumFiles As Long 'количество открываемых файлов

    With Application 'операции с приложением/отключаем для повышения скорости работы макроса
        .ScreenUpdating = False 'обновление экрана
        .DisplayAlerts = False 'выод системных сообщений
        .Calculation = xlManual 'автопересчет формул
        
        'присваиваем значения нашим переменным
        Set BazaWb = ThisWorkbook
        Set BazaSht = BazaWb.Sheets("алфавит")
        iPath = BazaWb.Path & "\"
        iTempFileName = Dir(iPath & "*.xlsm")
        Do While iTempFileName <> "" 'запускае цикл перебора файдов в папке
            If iTempFileName <> BazaWb.Name Then 'если имя файла не равно общему открываем
                With .Workbooks.Open _
                     (Filename:=iPath & iTempFileName, UpdateLinks:=False, ReadOnly:=True)
                     iNumFiles = iNumFiles + 1
                     'Рабочая книга не должна быть защищена паролем
                     With .Worksheets("Алфавит") 'с конкретным листом в открытой книге
                          'номер последней заполенной строки
                          iLastRowTempWb = .Cells(Rows.Count, 1).End(xlUp).Row
                          'последняя строка в итоговом файле на листе
                          iLastRowBaza = BazaSht.Cells(Rows.Count, 1).End(xlUp).Row + 1
                          'копируем диапазон с открытой книги в заданный лист
                          .Range(.Cells(2, 1), .Cells(iLastRowTempWb, 27)).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


я подпилил его под свои нужды.. вроде работает, но тащит много не нужного.. помогите избавиться пожалуйста!!
Изменено: Jystas - 20.10.2016 20:16:27
 
У вас в примерах был диапазон от A до J, а в макросе до АА
Код
'копируем диапазон с открытой книги в заданный лист 
     .Range(.Cells(2, 1), .Cells(iLastRowTempWb, 27)).Copy Destination:=BazaSht.Cells(iLastRowBaza, 1)
зачем у вас в коде стоит 27 (это столбец АА), поставьте 10 (это J)
 
отлично он обрезал таблицу справа, до нужного положения, а как взять область с B11 до J100  ??

(..а ведь я педагог музыки, не программист...)
 
Цитата
как взять область с B11 до J100
Range("B11:J100")
 
Kuzmich, !! спасибо огромное! я сделал то, от чего теперь мои коллеги получат удовольствие в работе, а ведь рутиной заниматься самое сложное!
с Вашей помощью вы заставили меня кое чему научиться! и это приятно! я не программист, я преподаю музыку, но уже появились мысли что надо кое что еще доделать в моих алфавитках!
надеюсь и рассчитываю на Вашу поддержку!
Изменено: Jystas - 20.10.2016 21:36:41
 
а еще один вопрос по ходу работы - как вставить данные не с 2 строки, а с 10 ??
сам нашел
iLastRowBaza = BazaSht.Cells(Rows.Count, 1).End(xlUp).Row + 10 ?? верно??
Изменено: Jystas - 20.10.2016 21:46:21
Страницы: 1
Наверх