Страницы: 1
RSS
Сбор данных из разных листов разных книг, доработка макроса
 
Форумчане, здравствуйте!
Очень нужна помощь в доработке макроса (разработка не собственная). Подробное пошаговое описание того, что делает пользователь с файлами есть внутри примера.
Задача состоит в том, чтобы добавить в макрос возможность фильтрации собираемых данных по дате и убрать появление первого столбца с названием файла, из которого он взял информацию..

При желании сильно помочь, можно еще в него сразу добавить удаление пустых строк, т.к. делаю это вторым шагом другим макросом (опять же позаимствованным).

Заранее благодарю!

С уважением, Анна.
 
Цитата
Sokolokos написал:
убрать появление первого столбца с названием файла, из которого он взял информацию
для этого перед строкой:

For li = LBound(avFiles) To UBound(avFiles)

запишите:
lCol = 0
или удалите из кода строку:
lCol = 1
Цитата
Sokolokos написал:
добавить удаление пустых строк
Перед строками(они в конце кода):
Код
With Application
        .ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
    End With

добавьте:
Код
Call DeleteEmptyRows

при этом не забудьте оставить Module1 в книге, в котором как раз содержится код удаления пустых строк.
Фильтрация по дате мало понятна и есть подозрение, что не так легко реализуема. Возможно потребуется более глобальная доработка кода.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А Кол-во платежей на дату и
Сумма платежей на дату - это всегда одна и та же дата. И эта дата в Заявках может повторяться несколько раз?
 
Kuzmich, да, в заявки пользователи могут добавить сколько угодно строк, каждая строка для них это заявка на оплату (по практике отдел может добавить до 20 строк на один платежный день), а некоторые отделы одну строчку раз в месяц добавят и все.
Платежные дни вторник и четверг, поэтому кол-во платежей и сумма платежей оцениваются чаще всего на одну дату, например, на следующей неделе буду смотреть на 11 октября, потом на 13 октября и собирать данные для "план" и на ковер к руководству для получения визы (разрешения) оплачивать.
 
The_Prist, Спасибо, сейчас попробую поколдовать) отпишусь о результатах!
 
Анна. У меня Excel 2003, поэтому у себя переделайте под свою версию.
Все файлы должны быть в одной папке. Макрос поочередно просматривает файлы и выбирает
нужные данные. Название файла заявок, например Заявки_маркетинг.xls и имя листа, с которого
идет сбор данных, должны совпадать (Заявки_маркетинг)
Код
Sub Sbor()
Dim iSumma As Double
Dim iShName As String
Dim iDate As Date
Dim FoundDate As Range
Dim FAdr As String
Dim n As Integer
Dim iStolb As Integer
Dim Заявки As Workbook           'текущая книга
Dim ЗаявкиSht As Worksheet       'лист в файле Заявки
Dim iTempFileName As String      'имя поочерёдно открываемого файла
Dim iPath As String              'путь к папке, где лежат все файлы
Dim iLastRow As Long             'последняя заполненная строка  в столбце A
Dim iLastRowTemp As Long         'последняя заполненная строка в открыв.файле
Dim iNumFiles As Long            'количество открываемых файлов

With Application
 .ScreenUpdating = False
 .Calculation = xlManual
    Set Заявки = ThisWorkbook                     'книга где макрос
    Set ЗаявкиSht = Заявки.Sheets("сбор данных")  'лист в этой книге
     iLastRow = ЗаявкиSht.Cells(Rows.Count, 1).End(xlUp).Row
      Range("C2:E" & iLastRow).ClearContents      'очищаем диапазон от данных
        iPath = Заявки.Path & "\"
        iTempFileName = Dir(iPath & "*.xls")    'считываем название файла из папки где и книга с макросом
     Do While iTempFileName <> ""
       If iTempFileName <> Заявки.Name Then     'если это не книга с макросом
       ' открываем очередную книгу в режиме только чтение
          With .Workbooks.Open _
               (Filename:=iPath & iTempFileName, UpdateLinks:=False, ReadOnly:=True)
            iShName = Split(iTempFileName, ".")(0)
              iNumFiles = iNumFiles + 1
            With Sheets(iShName)
                iLastRowTemp = .Cells(Rows.Count, 8).End(xlUp).Row
                iDate = ЗаявкиSht.Cells(3, 2)
              Select Case iShName
                Case "Заявки_закупки"
                  iStolb = 3
                Case "Заявки_маркетинг"
                  iStolb = 4
                Case "Заявки_СУП"
                  iStolb = 5
              End Select
              ЗаявкиSht.Cells(2, iStolb) = WorksheetFunction.CountA(.Range("H2:H" & iLastRowTemp))
              ЗаявкиSht.Cells(4, iStolb) = WorksheetFunction.Sum(.Range("H2:H" & iLastRowTemp))
                Set FoundDate = .Columns(1).Find(iDate, , xlFormulas, xlWhole)
                If Not FoundDate Is Nothing Then
                  FAdr = FoundDate.Address
                  n = 0
                  iSumma = 0
                  Do
                     iSumma = iSumma + .Cells(FoundDate.Row, 8)
                     n = n + 1
                   Set FoundDate = .Columns(1).FindNext(FoundDate)
                  Loop While FoundDate.Address <> FAdr
                    ЗаявкиSht.Cells(3, iStolb) = n
                    ЗаявкиSht.Cells(5, iStolb) = iSumma
                End If
            End With
                .Close saveChanges:=False     'закрываем очередную книгу без сохранения
          End With
       End If
        iTempFileName = Dir                    'считываем название следующего в папке файла
     Loop
        .Calculation = xlAutomatic
        .ScreenUpdating = True
    End With
    MsgBox "Информация собрана из " & iNumFiles & " файлов!", vbInformation, "Конец"
End Sub
Макрос привяжите к кнопке Собрать данные
Пробуйте! Удачи!
 
Kuzmich, спасибо! А если файлов будет десять, то в операторе CASE я должна их дописать?
 
Цитата
А если файлов будет десять
Значит у вас будет 10 столбцов для сбора данных и номер столбца надо будет прописать в Select Case
 
The_Prist, спасибо огромное, все получилось! я так понимаю, что изначально Вашим кодом воспользовалась?
Kuzmich, хоть вы и доработали мой файл не там где я просила, но тоже очень помогли, спасибо!!!

Благодаря вам, экономия рабочего времени и сил будет существенная!
Выкладываю результат.
 
Цитата
хоть вы и доработали мой файл
Я вообще-то сделал свой файл, не оглядываясь на ваш.
Всего доброго и удачи!
Страницы: 1
Читают тему
Наверх