Страницы: 1
RSS
Как объяснить макросу, чтобы он выделял n-ное кол-во ВИДИМЫХ строк после ручной фильтрации.
 
Здраствуйте, хочу сделать макрос, который будет выделять на листе "База данных" n-ное кол-во ВИДИМЫХ строк после ручной фильтрации.
(строки должны выделяться только видимые снизу вверх от последней).
Дано: в листе "База данных" есть два столбика, по которым будут фильтроваться данные E и F, также в ячейке F3 будет вручную предварительно указываться - сколько последних отфильтрованных измерений нужно будет скопировать в лист Статистика. (в листе статистика данные должны вставляться, начиная с 13 строки).

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

Загвоздка в следующем, незнаю как обяснить макросу, чтобы он выделял n-ное кол-во именно видимых строк начиная с последней и затем копировал их в лист статистика.

Буду благодарен за любую помощь или идею.
 
Используйте расширенный фильтр. Он как раз копирует, что нужно.

UPD: Все же, если хотите скопировать, вот код, который выделяет видимые ячейки:
Код
Option Explicit
Public Sub CopyVisible()

    Dim wb As Workbook
    Dim sh As Worksheet
    Dim rng As Range

    Set wb = ActiveWorkbook
    Set sh = ActiveSheet
    Set rng = Range(sh.Range("a7"), sh.Cells.SpecialCells(xlCellTypeLastCell))
    rng.SpecialCells(xlCellTypeVisible).Select

End Sub
Изменено: Все_просто - 17.03.2015 10:06:17
С уважением,
Федор/Все_просто
 
Листы защищены, проект VBA запаролен...
Проверяйте строки на видимость
Код
If Rows(I).EntireRow.Hidden = True Then
Согласие есть продукт при полном непротивлении сторон
 
Sanja, дык пример есть. Что мешает создать другую книгу и работать через модули вновь созданной через activesheet  и activeworkbook?
С уважением,
Федор/Все_просто
 
Цитата
Все_просто написал: Что мешает создать ... и работать
Мне? Это вроде как не я за помощью обратился. А Ваш энтузиазм можно только приветствовать
Согласие есть продукт при полном непротивлении сторон
 
Код
Sub Макрос2()
Dim a, n&, ar, i&, j&
    a = Range("A7").CurrentRegion
    n = Range("f3")
    ReDim ar(1 To n, 1 To UBound(a, 2))
    For i = UBound(a) To 1 Step -1
        If Not Rows(i).Hidden Then
            For j = 1 To UBound(ar, 2)
                ar(n, j) = a(i, j)
            Next j
            n = n - 1
            If n = 0 Then Exit For
        End If
    Next i
    Sheets("Статистика").Cells(13, 1).Resize(UBound(ar), UBound(ar, 2)) = ar
End Sub



Живи и дай жить..
 
а вот как, кстати, лучше?
Код
If Not Rows(i).Hidden Then
            For j = 1 To UBound(ar, 2)
                ar(n, j) = a(i, j)
            Next j
            n = n - 1
            If n = 0 Then Exit For
        End If
или
Код
If  Rows(i).Hidden Then
     else
            For j = 1 To UBound(ar, 2)
                ar(n, j) = a(i, j)
            Next j
            n = n - 1
            If n = 0 Then Exit For
        End If
Живи и дай жить..
 
По идее быстрее "If Rows(i).Hidden Then else", т.к. не выполняется дополнительной операции сравнения, но при выполнении визуально задержка вряд ли будет заметна.
 
Цитата
Слэн написал: а вот как, кстати, лучше?
Я тоже об этом задумывался :) По скорости - ноздря в ноздрю (если проверяется чистый boolean):
Скрытый текст
 
да, я знаю, что not выполняетс очень быстро..
тогда на первую полосу выходит фактор наглядности кода..
Живи и дай жить..
Страницы: 1
Наверх