Страницы: 1
RSS
Удаление пустых ячеек со сдвигом влево (сразу у всех таблиц), Прошу помочь автоматизировать форматирование отчета, выгрузка идет из 1С, всегда разное кол-во строк
 
Прошу помочь автоматизировать форматирование отчета, выгрузка идет из 1С, всегда разное кол-во строк. Надо удалить пустые столбцы со сдвигом влево, но обычным макросом, это невозможно, так как в каждой таблице значения в разных столбцах.
 
Макрос - это запрограммированная последовательность действий. Термин "обычный" тут не примени́м. Для решения Вашей задачи можно написать необходимый  макрос. Покажите в файле-примере на отдельном листе то, что должно получиться после "автоматизирования форматирования отчета".
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Спасибо огромное, что обратили на меня внимание. Количество строк и столбцов может меняться.  
 
Посмотрите вариант. Так, как у Вас таблицы разные, и искать границы данных не понятно как внес диалог.
При запуске макроса выделяете первый столбец таблицы для обработки например A1:A948. Строки можно не разворачивать. По строке 1 будет определена правая граница таблицы, и затем будут удалены все столбцы в которых нет данных.
Макрос получился медленный, на первую (большую) таблицу уходит 5-7 секунд.
Для себя можете скопировать текст макроса в книгу Personal и обрабатывать выгрузки.
 
Код
Sub Test()
    Dim Rng As Range, RngTemp As Range, LastCol As Long, LastRow As Long, iCol As Long, firstAddress As String

    Application.ScreenUpdating = False
    Sheets("TDSheet").Copy After:=Sheets(1)
    With ActiveSheet
        LastCol = .UsedRange.Columns.Count
        .Outline.ShowLevels RowLevels:=6
        Set Rng = .Columns(1).Find("Итого", , xlFormulas, xlWhole)
        If Not Rng Is Nothing Then
            firstAddress = Rng.Address
            Do
                LastRow = Rng.End(xlUp).Row
                If LastRow > 3 Then If .Cells(LastRow - 3, 1) = "Тип исполнения работ" Then LastRow = LastRow - 3
                For iCol = LastCol To 2 Step -1
                    Set RngTemp = .Range(.Cells(Rng.Row, iCol), .Cells(LastRow, iCol))
                    If WorksheetFunction.CountA(RngTemp) = 0 Then RngTemp.Delete Shift:=xlToLeft
                Next iCol
                Set Rng = .Columns(1).FindNext(Rng)
            Loop Until Rng.Address = firstAddress
        End If
    End With
    Application.ScreenUpdating = True
    MsgBox "Конец!", vbInformation, ""
End Sub
 
Вариант с явным указанием столбцов четырех таблиц выгрузки из 1С (предполагаю, что в "кривой" выгрузке из 1С изменений по столбцам и количеством строк между таблицами не будет)
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Большое спасибо! Все отлично работает!
 
off Отлично! Осталось узнать какое решение "отлично работает" и удовлетворило автора топика? (8
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Я всем очень благодарна, пользователь Igor67 сделал универсальный вариант (на любой случай для меня). Пользователь New  и Конь сделал макрос, для того чтобы я его поместила в модуль файла именно это отчета. Поэтому всем БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!
 
Евгения, макрос можно хранить в любом файле и запускать (применять) макрос можно на любом файле. Главное откройте оба файла (файл с макросом и файл с таблицей), откройте лист с таблицей, которую нужно обработать макросом и нажмите Alt+F8 и в списке выберите макрос (он там будет один) и нажмите "Выполнить" - макрос, который находится в другом файле обработает таблицу на активном листе (из другого файла). Т.е. макрос обрабатывает активный лист любого файла, а не только тот файл, где находится сам макрос. Вы можете хранить все нужные вам макросы в одном файле (допустим там у вас будет 10 нужных макросов), но применять все эти 10 макросов можно в любом файле с данными, в которых нет этих макросов, главное открыть файл с макросом, а затем открыть нужный файл с данными (чтобы он был активным - вы видели его глазами) и нажмите Alt+F8 и выберите нужный вам макрос из списка - Выполнить
Изменено: New - 31.05.2022 12:37:46
Страницы: 1
Читают тему (гостей: 1)
Наверх