(Скопируйте, если) Несколько переменных - PullRequest
0 голосов
/ 07 мая 2019

Я хотел скопировать данные с одного листа на другой.Часть выбора соответствует дате и конкретному значению столбца.

введите описание изображения здесь

Я попробовал этот код из интернета.Итак, основная логика в том, что если выполнены 2 условия, скопируйте строку.Однако это не работает.

На самом деле это работает сначала, когда пишется только одно условие, когда пишется второе условие, VBA ничего не делает

Sub CopyRowsAcross()
Dim i As Integer
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Clean_Sheet")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Daily_Report")

For i = 2 To ws1.Range("P65536").End(xlUp).Row
    If ws1.Cells(i, 1) = "DOWNY S.FRESH 900ML"  and ws2.Range ("C2") = ws1.Cells(i,3) Then
    ws1.Rows(i).Copy ws2.Rows(ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Row + 1)
    End If
Next i
End Sub

ws2.Range ("C2") - выбранная датазаписано в ячейке C2 на листе.

В результате получается строка, скопированная на основе этих 2 критериев

1 Ответ

0 голосов
/ 07 мая 2019

Это работает при условии, что ваши данные на рабочем листе 1 действительно являются датами, а фильтр в C2 также является датой:

Option Explicit
Sub CopyRowsAcross()

    Dim LastRow As Long, lrow As Long
    Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Clean_Sheet")
    Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Daily_Report")
    Dim DateFilter As Date

    With ws2
        DateFilter = .Cells(2, 3)
        lrow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    End With

    With ws1
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range("A1:C" & LastRow).AutoFilter Field:=1, Criteria1:="DOWNY S.FRESH 900ML"
        .Range("A1:C" & LastRow).AutoFilter Field:=3, Criteria1:=Format(DateFilter, "dd-Mmm-yy")
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        If LastRow > 1 Then
            .Range("A2:C" & LastRow).SpecialCells(xlCellTypeVisible).Copy ws2.Cells(lrow, 1)
        End If
        .AutoFilterMode = False
    End With

End Sub

Вместо того, чтобы выполнять циклы (занимающие много времени), вы можете просто отфильтровать нужные данные ископируйте все сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...