Страницы: 1
RSS
Копирование отфильтрованных данных с помощью макроса
 
Добрый день знатоки могучего языка VBA. Не могу решить задачу, нужно получить данные из таблицы на 1 листе документа введя данные для поиска в ячейке L7 на 2 листе и там же  вывести их в  только определенные колонки. В приложенном документе есть то что я хочу получить в итоге.

А хотелось бы помощи, так как в действительности я сделал то что хотел, включил запись макроса и все манипуляции сделал, при запуске получаю что нужно, но как сделать так чтобы введенные значения когда менялись в ячейке L7 лист2, то и дальнейшие манипуляции тоже менялись! Не могу понять
Код
Sub Макрос1()
    ActiveCell.FormulaR1C1 = "№203 от 05.04.2020"
    Sheets("Данные").Select
    Range("A1").Select
    ActiveSheet.Range("$A$1:$Q$36").AutoFilter Field:=1
    ActiveSheet.Range("$A$1:$Q$36").AutoFilter Field:=1, Criteria1:= _
        "№203 от 05.04.2020"
    Range("B5:B8").Select
    Selection.Copy
    Sheets("Результат").Select
    Rows("19:37").Select
    Selection.EntireRow.Hidden = False
    Range("D17").Select
    ActiveSheet.Paste
    Range("D21:F23").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("E20:F20").Select
    Range("F20").Activate
    Selection.ClearContents
    Sheets("Данные").Select
    Range("J5:J8").Select
    Selection.Copy
    Sheets("Результат").Select
    Range("E17").Select
    ActiveSheet.Paste
    Sheets("Данные").Select
    Range("O5:O8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Результат").Select
    Range("G17").Select
    ActiveSheet.Paste
    Range("F27").Select
End Sub

Буду благодарен любой помощи.
Изменено: ru_spaik - 09.04.2020 16:26:43
 
Цитата
ru_spaik написал: Не могу понять
Тут с Вами солидарны все, заглянувшие в ветку. Упоминаемый "лист2" не участвует в макросе.
Цитата
ru_spaik написал: когда менялись в ячейке L7 лист2
Вариант названия темы:
Копирование отфильтрованных данных с помощью макроса.
 
Код
Sub Main()
    Dim arr As Variant
    arr = GetArr()
    DeleteRows
    If Not IsEmpty(arr) Then FillArr arr
End Sub
'
Sub FillArr(a As Variant)
    With Sheets("Результат")
        If UBound(a, 1) > 1 Then
            .Range("B18").Resize(UBound(a, 1) - 1, 1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            .Rows(17).Copy .Rows(17).Resize(UBound(a, 1))
        End If
        .Range("B17").Resize(UBound(a, 1), UBound(a, 2)) = a
    End With
End Sub
'
Function GetArr() As Variant
    With Sheets("Данные")
        On Error Resume Next
        .ShowAllData
        On Error GoTo 0
        Dim a As Variant
        Dim y As Long
        y = .Cells(.Rows.Count, 1).End(xlUp).Row
        a = .Range(.Cells(2, 1), .Cells(y, 15))
        
        Dim s As String
        s = Sheets("Результат").Range("K7").Value
        y = WorksheetFunction.CountIfs(.Columns(1), s)
        If y > 0 Then
            Dim b As Variant
            ReDim b(1 To y, 1 To 6)
            Dim i As Variant
            For y = 1 To UBound(a, 1)
                If a(y, 1) = s Then
                    i = i + 1
                    b(i, 1) = i
                    b(i, 2) = "АоРПИ №"
                    b(i, 3) = a(y, 2)
                    b(i, 4) = a(y, 3)
                    b(i, 5) = a(y, 10)
                    b(i, 6) = a(y, 15)
                End If
            Next
            
            GetArr = b
        End If
    End With
End Function
'
Sub DeleteRows()
    With Sheets("Результат")
        On Error Resume Next
        .ShowAllData
        On Error GoTo 0
        .Cells.EntireRow.Hidden = False
    
        Dim y As Long
        y = .Range("B16").End(xlDown).Row
        If y >= 18 Then .Range(.Cells(18, 1), .Cells(y, 1)).EntireRow.Delete
    End With
End Sub
Страницы: 1
Наверх