Chamando a função Índice no VBA para recuperar uma matriz de dados

0

Eu tenho esta planilha.

NoeventoAtivardeoutraplanilha,querorecuperartodasaslinhasdeumanoeumasemanaespecificados.

NoVBA,consigoobterafolhadesejada.Comopossochamarafunçãodeíndicepararecuperartodasaslinhasdeumdeterminadoanoesemana?

Precisoimprimircolunasdessaslinhasnanovaplanilha.

EutenhoumachamadaparaafunçãoINDEXnapastadetrabalhoqueseparececomisso:

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

Eu modifiquei para ficar assim:

        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),"")

Na chamada original para a função INDEX, eu especifico três critérios (ano, semana, máquina) para recuperar uma coluna específica para uma linha de dados.

Mas no VBA eu só quero especificar dois critérios (ano, semana) e percorrer todas as linhas correspondentes (máquinas) para recuperar colunas específicas.

Como modifico a linha de código "comment_date" para obter isso?

    
por user823527 28.01.2018 / 01:12

1 resposta

0

Como você não fez o upload do Código VBA com o qual está tentando sugerir o código abaixo escrito para testar seus dados.

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: Você precisa substituir ColName e Criteria1 & 2 com o seu.

ou você pode usar desta maneira também,

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

Espero que isso ajude você.

    
por 28.01.2018 / 11:42