Страницы: 1
RSS
Как с помощью VBA скопировать информацию с одного листа в другой по условию
 
Добрый день, знатоки!
Есть большая таблица (выгрузка из одной программы) в которой много столбцов, и очень много строк, где столбцы могу менять свой порядок, добавляться новые, удалятся старые и т.д. Допустим столбец с названием "Начало" был "С", в следующей выгрузке может стать "Н".
Задача: сформировать "Свод" на новом листе с определёнными столбцами, и в определённом порядке с копированием данных, данная задача реализована поиском информации в интернете в том числе и на этом форуме. Но есть одно но, в листе "Свод", в один из столбец нужно собрать информацию из нескольких столбцов листа "Выгрузка" по определенному условию и как это внедрить в макрос у меня не хватает опыта, уж простите))) Пример условия прописал в листе "Свод" столбец "Н"
Файл с примером прилагаю.
 
Денис,
просто запишите Ваш макрос:
фильтруете таблицу по Вашим условиям
копируете ее
вставляете на другой лист
слегка корректируете макрос
 
Цитата
написал:
Денис,
просто запишите Ваш макрос:
фильтруете таблицу по Вашим условиям
копируете ее
вставляете на другой лист
слегка корректируете макрос
Спасибо, но я не понял суть вашего предложения.
 
Денис,
запишите макрос с помощью макрорекордера.
На вкладке "Разработчик" кнопка "Записать макрос"
 
Цитата
написал:
Денис,
запишите макрос с помощью макрорекордера.
На вкладке "Разработчик" кнопка "Записать макрос"
Таким способом вроде что-то даже получается, я думал может есть более "продвинутый код"
 
Код соответствующий формуле из примера. Меня несколько смущает, что формула очень далека от формулировки задачи в сообщении #1.
Код
Sub ВыгрузкаСвод()
    Dim srr As Variant
    Dim vrr As Variant
    srr = Sheets("Свод").UsedRange
    vrr = Sheets("Выгрузка").UsedRange
    
    Dim ys As Long
    For ys = 4 To UBound(srr, 1)
        If srr(ys - 1, 1) = "название работ" Then
            If vrr(ys, 7) = "" Then
                srr(ys, 8) = vrr(ys, 1)
            ElseIf vrr(ys, 7) > 0 Then
                srr(ys, 8) = vrr(ys, 2)
            Else
                srr(ys, 8) = "-"
            End If
        End If
    Next
    
    Sheets("Свод").UsedRange = srr
End Sub
 
Денис,
безусловно найдется более продвинутый код, но нужен ли он Вам, чтобы покрыть текущую задачу?
 
Цитата
написал:
Код соответствующий формуле из примера. Меня несколько смущает, что формула очень далека от формулировки задачи в сообщении #1.
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21      Sub   ВыгрузкаСвод()          Dim   srr   As   Variant          Dim   vrr   As   Variant          srr = Sheets(  "Свод"  ).UsedRange          vrr = Sheets(  "Выгрузка"  ).UsedRange                   Dim   ys   As   Long          For   ys = 4   To   UBound(srr, 1)              If   srr(ys - 1, 1) =   "название работ"   Then                  If   vrr(ys, 7) =   ""   Then                      srr(ys, 8) = vrr(ys, 1)                  ElseIf   vrr(ys, 7) > 0   Then                      srr(ys, 8) = vrr(ys, 2)                  Else                      srr(ys, 8) =   "-"                  End   If              End   If          Next                   Sheets(  "Свод"  ).UsedRange = srr    End   Sub   
 
Спасибо за код!
 
evgeniygeo, По методу записи макроса, все даже и получилось! Работает! Но красоту навести охота)))
Страницы: 1
Наверх