У меня есть этот лист.

В событии Activate другого рабочего листа я хочу получить все строки за указанный год и неделю.

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

Я должен напечатать столбцы из этих строк на новом листе.

У меня есть вызов функции INDEX в книге, которая выглядит следующим образом:

=IFERROR(INDEX('L5 Data'!$C$6:$C$104000,SUMPRODUCT(('L5 Data'!$A$6:$A$104000=$B$1)*('L5 Data'!$B$6:$B$104000=$B$2)*('L5 Data'!$F$6:$F$104000=E$6)*ROW('L5 Data'!$6:$104000))-5),"")

Я изменил это, чтобы выглядеть так:

        comment_date = Application.WorksheetFunction.IfError(Application.WorksheetFunction.Index(line_data_sheet.Range(C6:C104000), Application.WorksheetFunction.SUMPRODUCT((line_data_sheet.Range(A6:A104000)=year)*(line_data_sheet.Range(B6:B104000)=week)*('L5 Data'!$F$6:$F$104000=D$3)*ROW(line_data_sheet.Range($6:$104000)))-5),"")

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

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

Как мне изменить строку кода "comment_date", чтобы получить это?

1 ответ1

0

Поскольку вы не загрузили код VBA, который пытаетесь использовать, так что я хотел бы предложить нижеприведенный код, чтобы попробовать с вашими данными.

Dim row as Long

With Sheets("Line_Data_Sheet").Range("A6:C104000"))
    For row = 6 To .Rows.Count
        If .Cells(row, ColName).Value Like Criteria1 And .Cells(row, ColName).Value Like Criteria2 Then

            Debug.Print .Cells(row, valueCol)
        End if
    Next
End With

NB. Вам необходимо заменить ColName и Criteria1 & 2 своими.

или вы можете использовать таким же образом,

For Each cell In Range("A6:B104000")
If cell.Value = "Year" And cell.Value = "Week" Then
    i = cell.Row
    Range("E" & i).Formula = "IfError(Application.WorksheetFunction.Index(line_data_sheet.Range(C6:C104000), Application.WorksheetFunction.SUMPRODUCT((line_data_sheet.Range(A6:A104000)=year)*(line_data_sheet.Range(B6:B104000)=week)*ROW(line_data_sheet.Range($6:$104000)))-5),"")"
End If
Next

Надеюсь, это поможет вам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .