Как записать это в утверждение IF - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь скопировать большие объемы данных из большого отчета (называемого новым отчетом по этому вопросу) в основной отчет.

Приведенный ниже код отлично работает, когда есть только одна строка для получения данных.Однако не уверен, что делать, когда есть несколько строк с таким же идентификатором, как если бы он смотрел только на первую строку , а не на все строки .Почему это проблема?Потому что иногда приведенное ниже условие не выполняется в первой строке (показано в приведенном ниже коде)

NewReportCell.Offset(0, -93).Value = "-" And _

NewReportCell.Offset(0, -142) = "YES" Then

Sub Interactv4(Optional ByDummy As Byte)

    Dim PK As Variant
    Dim Concat As String
    Dim RowCount As Long
    Dim nextrow As Long
    Dim tC As String 'tC should represent the column with the concatenate in it
    Dim col(1 To 8) As String
    Dim loc As Range
    Dim NewReportCell As Range

    PK= loc.Offset(0, 2).Value

    If loc.Offset(0, 2).Value = "Not Available" Then
        loc.Offset(0, 80) = "Y"
    Else
        loc.Offset(0, 80) = "N"

        'Line items from the new report
        RowCount = WorksheetFunction.CountIf(NewReport.Range("FW:FW"), PK)
        Set NewReportCell = NewReport.Range("FW:FW").Find(PK, lookat:=xlWhole)
        If RowCount = 1 And _
           NewReportCell.Offset(0, -93).Value = "-" And _
           NewReportCell.Offset(0, -142) = "YES" Then

            'A large amount of data is copied from the daily report based on the primary key given above

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

    Else
        If RowCount > 1 And _
           NewReportCell.Offset(0, -93).Value = "-" And _
           NewReportCell.Offset(0, -142) = "YES" Then

1 Ответ

0 голосов
/ 28 ноября 2018

выглядит как работа для AutoFilter():

If loc.Offset(0, 2).Value = "Not Available" Then
    loc.Offset(0, 80) = "Y"
Else
    loc.Offset(0, 80) = "N"

    With NewReport 'reference NewReport sheet
        With .Range("AK1:FW" & .Cells(.Rows.Count, "FW").End(xlUp).Row) ' reference referenced sheet range in columns AK:FW from row 1 down to FW column last not empty value
            .AutoFilter Field:=1, Criteria1:="YES" ' filter referenced sheet on it first column (i.e. column "AK") with "YES" content
            .AutoFilter Field:=50, Criteria1:="-" ' filter referenced sheet on it 50th column (i.e. column "CH") with "-" content
            .AutoFilter Field:=143, Criteria1:=PK ' filter referenced sheet on it 143th column (i.e. column "FW") with PK content
            If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then ' uf any filtered values other than referenced range headers row
                .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy Destination:=myOtherWorkbook.Worksheets("masterData").Range("A2") ' copy referenced range filtered values (skipping headers) to you destination workbook/worksheet
            End If
        End With
        .AutoFilterMode = False
    End With
End If

Это предполагает, что строка 1 NewReport рабочего листа является строкой заголовка вашей базы данных

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