Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Сводный отчёт из нескольких файлов
 
МатросНаЗебре, УРА! Макрос работает, единственное, что логика сортировки файлов у Windows и VBA немного разная, поэтому в итоговом отчёте порядок файлов логичный, но отличается от от Windows. Но это уже мелочи, главное удалось победить ручной перебор и редактирование. Благодарю Вас от всей души, за то что терпеливо возились с этим макросом. Также благодарю всех, кто помог советом, ссылкой и др. Поздравляю всех форумчан с наступающими праздниками и желаю всех благ. :)  
Сводный отчёт из нескольких файлов
 
МатросНаЗебре, теперь остальные пустые строки не удаляются, а только скрываются.

[CODE][/CODE]
Изменено: Владимир Никифоров - 30.12.2019 14:48:27
Сводный отчёт из нескольких файлов
 
МатросНаЗебре, некорректно отрабатывает последняя процедура удаления пустых строк
Код
Sub DeleteEmptyRow(sh As Worksheet)
    With sh
        Dim y As Long
        y = .Cells(.Rows.Count, 1).End(xlUp).Row
        Dim a As Variant
        Dim e As Variant
        If y = 1 Then y = 2
         
        a = .Range(.Cells(1, 1), .Cells(y, 1))
        e = .Range(.Cells(1, 5), .Cells(y, 5))
         
        For y = UBound(a, 1) To 2 Step -1
            If a(y, 1) = "" Or e(y, 1) <> "+" Then
                .Rows(y).Delete
            End If
        Next
    End With
End Sub
Изменено: Владимир Никифоров - 30.12.2019 14:24:02
Сводный отчёт из нескольких файлов
 
МатросНаЗебре, баг с затиранием  первой строчки исчез, но строка №8 из исходников в итоговый отчёт  не попадает.

Результат работы макроса приложил.
Сводный отчёт из нескольких файлов
 
Вот пример того, как отрабатывает макрос
Сводный отчёт из нескольких файлов
 
Цитата
МатросНаЗебре написал:
Нашёл.Перенесите макрос из персональной книги.
Вы правы! Макрос заработал, если хранить в текущей книге, но есть пару багов:
-затирается строка 1 с шапкой
-не копируются 8 (восьмые) строки
-прощу прощения, не указал в задаче, что в итоговом отчёте нужны только строки со значением "+" по столбцу Е, т.е либо не снимать фильтр по столбцу Е в исходнике, либо удалить строки БЕЗ пометки "+" по столбцу Е в итоговом отчёте (в приоритете - скорость работы макроса на большом количестве файлов ~до 250 файлов)
Изменено: Владимир Никифоров - 27.12.2019 16:19:09
Сводный отчёт из нескольких файлов
 
Вот примеры исходников:
Изменено: Владимир Никифоров - 27.12.2019 15:30:10
Сводный отчёт из нескольких файлов
 
МатросНаЗебре,
Цитата
МатросНаЗебре написал:
Сложно сказать, не видя файла. А какая область заполнена на момент появления ошибки?
Вот мои действия пошагово:
- в 1 папку складываю отчёты-исходники и НЕ заполненный файл сводного отчёта с шапкой
- открываю НЕ заполненный файл сводного отчёта (приложил)
- запускаю макрос
- ошибка
Макрос хранится в персональной книге. Грешил на надстройку Office tab, но при отключенной надстройке та же ошибка.
Сводный отчёт из нескольких файлов
 
МатросНаЗебре,
Цитата
МатросНаЗебре написал:
А я понял, ошибка возникла, когда рядом не было файлов отчётов.
Файл отчёта и файлы-исходники находятся в 1 папке, при запуске макроса-ошибка в блоке sum_sheet2.
Это ошибка в макросе или я неверно выполняю какие-то шаги? Уже ум за разум заходит.
Сводный отчёт из нескольких файлов
 
Цитата
МатросНаЗебре написал:
И минутка недоумения. Зачем Вы тестируете на пустых файлах, если у Вас 200 файлов в папке?
Я открываю файл сводного отчёта, который изначально пустой, без данных, а файлы-исходники НЕ пустые. :)  
Сводный отчёт из нескольких файлов
 
МатросНаЗебре, не могу понять: или лыжи в чём ошибка и какие условия для корректной работы макроса?

Делаю так:
- кладу в 1 папку пустой файл сводного отчёта с шапкой и файлы отчетов-исходников
-открываю файл сводного отчёта
-запускаю макрос.....


-ошибка в строке
Код
.Range(.Cells(1, 1), .Cells(y, 5)).AutoFilter Field:=5, Criteria1:="+"
в блоке Sub Job_sum_sheet2
Сводный отчёт из нескольких файлов
 
МатросНаЗебре,
Цитата
МатросНаЗебре написал:
Вставьте, например, в конец модуля. И удалите существующую процедуру DeleteEmptyRow. От Sub DeleteEmptyRow(sh As Worksheet) до End Sub.
Что-то я туплю. Не могу понять, куда именно вставить код.
Вот код из сообщения №4 целиком. Если не сложно поправьте, пожалуйста
Код
Public first_file As Boolean
Sub Main()
    Application.ScreenUpdating = False
     
    Dim shSum As Worksheet:
    Set shSum = ThisWorkbook.Sheets(1)
    Job_sum_sheet1 shSum
    Job_folder shSum
    Job_sum_sheet2 shSum
    Application.ScreenUpdating = True
End Sub
Sub Job_folder(shSum As Worksheet)
    Dim fso As Object: Set fso = CreateObject("Scripting.Filesystemobject")
    Dim f As Variant
    first_file = True
    For Each f In fso.GetFolder(ThisWorkbook.Path).Files
        With f
            If fso.GetExtensionName(.Name) Like ("xls*") Then
                If Left(.Name, 2) <> "~$" Then
                    If .Name <> ThisWorkbook.Name Then
                        Application.StatusBar = .Name
                        Job_file f, shSum
                        Application.StatusBar = False
                    End If
                End If
            End If
        End With
        DoEvents
    Next
    Application.CutCopyMode = False
End Sub
Sub Job_file(ByVal sFull As String, shSum As Worksheet)
    Dim wb As Workbook
    Set wb = Workbooks.Open(sFull)
    Job_sheet wb.Sheets(1), shSum
    wb.Close False
End Sub
Sub Job_sheet(sh As Worksheet, shSum As Worksheet)
     
    Dim rTo As Range
    With ThisWorkbook.Sheets(1)
'        If .Cells(1, 1).Value = "" Then
'            Set rTo = .Cells(1, 1)
'        Else
            Set rTo = .Cells(.Rows.Count, 1).End(xlUp).Cells(2, 1)
'        End If
    End With
     
    With sh
        Dim y As Long
        y = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range(.Cells(7, 1), .Cells(y, 5)).AutoFilter Field:=5
        y = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Rows("8:" & y).Copy rTo
        If first_file Then
            .Rows("8:" & y).Copy
            rTo.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            first_file = False
        End If
    End With
    Application.CutCopyMode = False
End Sub
Sub Job_sum_sheet1(shSum As Worksheet)
    With shSum
        .Columns("A:E").Delete Shift:=xlToLeft
    End With
End Sub
Sub Job_sum_sheet2(shSum As Worksheet)
    With shSum
        Dim y As Long
        y = .Cells(.Rows.Count, 1).End(xlUp).Row
        Dim a As Variant
        a = .Range(.Cells(1, 1), .Cells(y, 1))
        For y = UBound(a, 1) To 2 Step -1
            If a(y, 1) = "" Then
                .Rows(y).Delete
            End If
        Next
         
        .Parent.Activate
        .Select
        .Cells(1, 1).Select
        .Range(.Cells(1, 1), .Cells(y, 5)).AutoFilter Field:=5, Criteria1:="+"
        .Columns("E:E").EntireColumn.Hidden = True
         
        Application.DisplayAlerts = False
        .Parent.Save
        Application.DisplayAlerts = True
    End With
End Sub
Изменено: Владимир Никифоров - 27.12.2019 11:17:17
Сводный отчёт из нескольких файлов
 
МатросНаЗебре,

Простите за глупый вопрос, куда вставить этот блок кода из сообщения №12?
Изменено: Владимир Никифоров - 26.12.2019 22:37:40
Сводный отчёт из нескольких файлов
 
Цитата
PooHkrd написал:
А вам не нужно исходное, вам нужно в принципе форматирование. Ваша задаче легко решается с помощью маленького справочника и УФ.Можно и без справочника, но тогда надо будет правил побольше сделать - не принципиально.
Решение на PQ, конечно, самое элегантное. Сейчас пришлось использовать VBA тупо потому, что внешний вид ранее оформленных отчётов и последующих должен быть одинаковым (от слова совсем :D ). А так, да, PQ - это отличный инструмент.
Сводный отчёт из нескольких файлов
 

Пока использую "полуавтоматическое" решение:

Код
Sub Копировать_ячейки()
' Сочетание клавиш: Ctrl+ч

     Range("A8:E100").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Трубопроводы межцеховые.xlsx").Activate ' текст в кавычках=имя файла сводного отчёта
    Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial
   End Sub

Однако приходится последовательно открывать каждый фал и применять макрос. Подскажите, пожалуйста, как допилить макрос, чтобы сделать следующие шаги:

-1. Зайти в определённую папку

-2. Открыть файл

-3. Применить макрос

-4. Закрыть файл без сохранения

-5. Повторить пункты 1-4 для всех файлов в папке

Для облегчения задачи можно предварительно переименовать файлы (например Отчёт1, Отчёт2, Отчёт3 и.т.д.)

Изменено: Владимир Никифоров - 26.12.2019 15:52:07
Сводный отчёт из нескольких файлов
 
МатросНаЗебре, макрос не заработал, увы. По этой строке:
Код
For y = UBound(a, 1) To 2 Step -1
Сводный отчёт из нескольких файлов
 
Murderface_, Wiss, ,вариант на PQ попробовал, в принципе- получилось, но, непонятно, как сохранить исходное форматирование (шрифт, заливка и.т.п.). Заливка, к примеру, удобна для того, чтобы навскидку определить тип дефекта. Приложу 2 файла: первый-это то, что выдаёт PQ, второй то, что хотелось бы получить на выходе.
Сводный отчёт из нескольких файлов
 
МатросНаЗебре, появляется ошибка синтаксиса в первом макросе по этим строкам
Код
    Set shSum = ThisWorkbook.Sheets(1)    Job_sum_sheet1 shSum

    Job_sum_sheet2 shSum    Application.ScreenUpdating = True

Сводный отчёт из нескольких файлов
 
Здравствуйте уважаемые форумчане! Задачка не новая, но есть ньюансы:

В папке находятся примерно 200 файлов с отчётами.
Необходимо:
-в каждом файле снять фильтр по столбцу Е
-скопировать строки с данными начиная ниже 8 строки (включительно) (пустые строки не нужны)
Далее в итоговом отчёте:
-вставить скопированные строки в итоговый отчёт последовательно из каждого отчёта
-установить фильтр по столбцу Е по значению "+"
-скрыть столбец Е
-перейти в ячейку А1
-сохранить итоговый отчёт

Подскажите, пожалуйста, решение, как автоматизировать эти однотипные операции. :qstn:  
Изменено: Владимир Никифоров - 25.12.2019 15:40:59
Пакетное редактирование нескольких файлов - снять/установить фильтр, по-возможности без открытия каждого
 
МатросНаЗебре, Спасибо вам огромное!!! Макрос прекрасно работает. Сегодня за пару часов исправил отчётов, как за 1,5 дня ручного редактирования.  
Пакетное редактирование нескольких файлов - снять/установить фильтр, по-возможности без открытия каждого
 
Цитата
МатросНаЗебре написал:
Макрос для обработки одного файла - перекидывание фильтра.
МатросНаЗебре, Теперь макрос отрабатывает, но некорректно: с тех ячеек по столбцу Е, которые были ниже ячеек с пометкой "+" в исходнике (отфильтрованные ячейки)  пометка "+" не убирается . Несколько запутанно объяснил, прикладываю примеры: ячейки, где пометка "+" не убралась выделил красным.
Пакетное редактирование нескольких файлов - снять/установить фильтр, по-возможности без открытия каждого
 
МатросНаЗебре, макрос не хочет работать, на этой строке останавливается: :(
Код
For Each c In .Range(.Cells(8, 5), .Cells(y, 5))
Пакетное редактирование нескольких файлов - снять/установить фильтр, по-возможности без открытия каждого
 
Попробовал записать макрос:
-выделить ячейки столбца Е
-протянуть их на столбец F
-снять фильтр со столбца А
-удалить ячейки столбца Е со значениями "+"
-установить фильтр по столбцу Е по значениям "+"

При ручном выполнении этих шагов всё получается, а при применении макроса удаляется всё что ниже строки 8. Подскажите, где может быть ошибка? "Код" макроса:
Код
Sub Корректировка_Отчёта2()
'
' Корректировка_Отчёта2 Макрос
'
' Сочетание клавиш: Ctrl+ы
'
    Range("E9:E100").Select
    Selection.FillRight
    ActiveWindow.ScrollRow = 64
    ActiveWindow.ScrollRow = 63
    ActiveWindow.ScrollRow = 61
    ActiveWindow.ScrollRow = 59
    ActiveWindow.ScrollRow = 58
    ActiveWindow.ScrollRow = 57
    ActiveWindow.ScrollRow = 56
    ActiveWindow.ScrollRow = 55
    ActiveWindow.ScrollRow = 54
    ActiveWindow.ScrollRow = 53
    ActiveWindow.ScrollRow = 49
    ActiveWindow.ScrollRow = 44
    ActiveWindow.ScrollRow = 43
    ActiveWindow.ScrollRow = 25
    ActiveWindow.ScrollRow = 19
    ActiveWindow.ScrollRow = 9
    ActiveWindow.ScrollRow = 8
    ActiveWindow.ScrollRow = 7
    ActiveWindow.ScrollRow = 6
    ActiveWindow.ScrollRow = 5
    ActiveWindow.ScrollRow = 4
    ActiveWindow.ScrollRow = 3
    ActiveWindow.ScrollRow = 2
    ActiveWindow.ScrollRow = 1
    ActiveSheet.Range("$A$7:$E$52").AutoFilter Field:=1
    Range("E9:E100").Select
    Selection.Delete Shift:=xlToLeft
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    ActiveSheet.Range("$A$7:$E$52").AutoFilter Field:=5, Criteria1:="<>"
    ActiveWorkbook.Save
End Sub
Изменено: Владимир Никифоров - 24.12.2019 07:31:06
Пакетное редактирование нескольких файлов - снять/установить фильтр, по-возможности без открытия каждого
 
Здравствуйте, уважаемые форумчане! По работе предстоит задача: исправить более 300 отчётов, вручную-очень долго, подскажите, пожалуйста, как автоматизировать процесс.

Что есть:
-Windows 10 x64, Excel 2016 x64,
-приблизительно 300 папок с подпапками,
-в каждой по 1 отчёту в виде excel файла.

Что нужно:
-отредактировать каждый файл - сделать во всех однотипные действия (по-возможности без открытия каждого):
-в каждом файле установлен фильтр по столбцу А (по числовым значениям + пустые ячейки),
-в столбце Е установлен фильтр по значению "+",
-нужно снять фильтр со столбца А и установить фильтр по столбцу Е по по значению "+", но только на те ячейки, которые отфильтрованы по столбцу А,
-т.е на выходе должен получиться файл с теми же ячейками, что и в исходном файле, но с фильтром по столбцу Е, а не А,
-если по-другому сформулировать: в отфильтрованных ячейках по столбцу Е должны исчезнуть  "+", а фильтр установлен по столбцу Е, и снят со столбца А,
-чисто визуально ничего не поменяется, "перепрыгнет" только фильтр,
-имя файла должно остаться тем же.

В приложенных файлах пример исходника и результата. Заранее благодарю за предложенные решения.
Генератор случайных значений из заданного диапазона с условиями.
 
Казанский, Спасибо большое! Код работает как нужно, однако при копировании ячеек "Специальная вставка-Значения" получается большой "хвост" после запятой. Возможно ли скорректировать код, так, чтобы получались значения с точностью до десятых?  
Генератор случайных значений из заданного диапазона с условиями.
 
Здравствуйте, уважаемые форумчане! Прошу помощи в решении не совсем тривиальной задачи. На форуме присутствуют готовые решения, однако они не в полной мере подходят. Необходим генератор случайных значений из заданного диапазона с условием. Условия следующие:
1. Значения в столбцы A, B, С вносятся вручную.
2. Значения в столбцах D-Q необходимо сгенерировать в случайном порядке в количестве, указанном в столбце А.
3. Среди сгенерированых значений обязательно должны присутствовать  максимальное и минимальное значения.
4. Минимальное и максимальное значения должны находиться в случайной позиции в сгенерированой строке значений.

Использовать решение на макросе или с помощью формул - не принципиально. В приложенном файле- то, что необходимо получить.

Спасибо.
Задачка с макросом
 
Огромное спасибо всем, замечательно работает! Удачи вам!
Задачка с макросом
 
{quote}{login=clem}{date=09.12.2011 09:21}{thema=Задачка с макросом}{post}у фрумчам {/post}{/quote}  
 
Форумчан 8)
Задачка с макросом
 
Я дико извиняюсь, я смакросами на ВЫ, если б ещё работающий пример....
Задачка с макросом
 
Здравствуйте! В очередной раз прошу помощи у фрумчам в решении такой задачки:  
 
Требуется преобразовать данные, подробности в примере.  
 
Спасибо.
Страницы: 1 2 След.
Наверх