Страницы: 1
RSS
Скопировать таблицу с нескрытыми строками на новый лист
 
Добрый день.
На листе имеется таблица в ней есть строки с (нулями).
При помощи кнопки скрываем нулевые строки и надо скопировать таблицу на новый лист без скрытых строк
Как скопировать таблицу без скрытых строк?
 
С доп. столбцом
 
Спасибо. А макросом можно это сделать?
 
Можно. Ждите, кто-то да зайдет.
 
Код
Sub Hidden()
    Application.ScreenUpdating = False
    i = 10 'номер строки, с которой начнется обработка
    k=i
    While Not IsEmpty(Cells(i, 2)) ' проверяем каждую строчку пока не встретимся с пустым значением
        If Cells(i, 2).Value = 0 Then   ' прячем  строки с нулевым значением
            Rows(i).Hidden = True
        End If
        i = i + 1
    Wend
    Range("A" & k-1 & ":B" & i - 1).SpecialCells(xlCellTypeVisible).Copy
    Sheets("результат").Select
    Range("D2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Application.ScreenUpdating = True

End Sub
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Спасибо, Михаил Ваши ответы ,как всегда заслуживают оценку 5+ :D
 
Цитата
Юрий написал:
При помощи кнопки скрываем нулевые строки и надо скопировать таблицу на новый лист без скрытых строк
А зачем сначала срывать?
 
Я понял Вашу мысль Юрий М.  Надо было копировать все  ненулевые строки и все. А как это в коде  отобразить ?
 
Сам код не смотрел, но по тому же принципу, по какому скрывали: если условие выполняется - копируем строку.
 
Подкорректировал  код.
Копируем таблицу и переносим  ненулевые строки ,но в результате не все строки отображаются. Как быть?
 
Последний файл не смотрел.
Вариант: работа с массивом, ничего не прячем, копируем значения строк с ненулевыми суммами.
Код
Sub CopyRows()
Dim ArrData()
Dim i As Long, k As Long
    With Лист3 ' родитель - лист "отчет"
        ' данные в массив: от A10 до последней  заполненной в В
        ArrData = .Range("A10:B" & .Cells(.Rows.Count, 1).End(xlUp).Row).Value
        
        For i = 1 To UBound(ArrData) ' цикл по строкам
            If ArrData(i, 2) Then ' если сумма есть
                k = k + 1 ' счетчик строк выгрузки
                ArrData(k, 1) = ArrData(i, 1) ' заполняем массив выгрузки
                ArrData(k, 2) = ArrData(i, 2)
            End If
        Next i
    End With
    
    ' если строки с суммами есть, выгружаем массив на лист
    Application.ScreenUpdating = False
    If k > 0 Then Лист1.Cells(3, 4).Resize(k, 2).Value = ArrData
    Application.ScreenUpdating = True
End Sub

Если активен не лист "результат", строки Application.ScreenUpdating = False/True можно исключить.
Если выгрузка не разовая (если разовая - зачем макрос? :)), правильно - добавить очистку диапазона выгрузки, иначе могут остаться заполненные строки ниже выгруженных данных.
 
Юрий, расширенный фильтр рулит. Вот макрос, записанный макрорекордером и несколько "причесанный"
Код
Sub Макрос1()
  With Sheets("результат")
    Range("A9:B9").Copy .Range("A1")
    Range("B9").Copy .Range("G1")
    .Range("G2") = ">0"
    Range("A9").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=.Range("G1:G2"), CopyToRange:=.Range("A1:B1"), Unique:=False
    .Range("G1:G2").Clear
  End With
End Sub
 
Казанский
Алексей, я до сих пор считал, что расширенный фильтр копирует отобранные данные
только на тот же лист. Как в вашем случае копирует на лист Результаты?
 
 спасибо всем.Буду разбираться.
 
Kuzmich, работает однако :)
Можно и через меню запустить расширенный фильтр так, что исходный диапазон, диапазон условий и диапазон выгрузки будет на разных листах. И даже в разных КНИГАХ. Для этого нужно вызывать диалог при НЕактивном листе с исходным диапазоном, чтобы потом при переключении на лист с исходным диапазоном прописался полный адрес диапазона с листом (и книгой). Или дописать имя листа вручную.
 
Спасибо Алексей, постараюсь запомнить!
Страницы: 1
Наверх