Refre sh данных во время цикла - PullRequest
1 голос
/ 10 апреля 2020

Я получаю данные с листа и хочу, чтобы они отображались на другом листе, чтобы проверить, нужно ли что-то делать в ближайшем будущем.

Я сканирую все данные, которые имеют случай «ПЛАНИРОВАТЬ», и регистрирую те, которые соответствуют спецификации, на моем листе.

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

Dim i As Integer
Dim lastRowS2 As Long
Dim lastRowS3 As Long

lastRowS2 = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Row
i = 5
For j = i To lastRowS2
    Select Case Sheets(2).Range("O" & j)
        Case Is = "-"
        Case Is = "TO PLAN"
        lastRowS3 = Sheets(3).Cells(Rows.Count, "A").End(xlUp).Row
        Sheets(3).Range("A" & lastRowS3) = Sheets(2).Range("C" & j)

    End Select
'MsgBox j
Next j

Есть ли способ получить все данные, которые соответствуют условию правильно отображается?

Спасибо за помощь и извините за мой Engli sh, я немного ржавый.

1 Ответ

0 голосов
/ 10 апреля 2020

Расширяя мой комментарий, ваш код может быть реорганизован следующим образом (пояснения в комментариях):

Dim j As Long ' use "Long" (spanning to some +/- 2 billions) instead of "Integer" type (spanning to some +/- 32k)

With Sheets(2) ' reference your sheet object
    For j = 5 To .Cells(.Rows.Count, "A").End(xlUp).Row ' each object with after a "dot" is the child of the referenced one (in this case: Sheets(2))
        Select Case .Range("O" & j)
            Case Is = "-"
            Case Is = "TO PLAN"
                Sheets(3).Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = .Range("C" & j).Value
        End Select
    Next
End With

Вы также можете избежать зацикливания и использовать метод Autofilter():

With Sheets(2) ' reference your sheet object
    With .Range("A4:O" & .Cells(.Rows.Count, "A").End(xlUp).Row) ' reference referenced sheet range spanning from "O4" to column A last not empty cell 
        .AutoFilter field:=15, Criteria1:="TO PLAN"' filter referenced range on its 15th filed (column O) with "TO PLAN" value
        .Resize(.Rows.Count - 1, 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets(3).Cells(Rows.Count, "A").End(xlUp).Offset(1) ' copy referenced range first column filtered cells skipping first row (header) to Sheet(3) column A first empty cell after last not empty one
    End With
    .AutoFilterMode = False
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...