Encontre linha que corresponda a dois critérios

0

Eu tenho uma planilha com dados semelhantes aos seguintes:

P1_ShipType         P2_ShipType         RoundTime
Kus_AssaultFrigate  Tai_AssaultFrigate  117
Kus_AssaultFrigate  Tai_AttackBomber    17
Kus_AssaultFrigate  Tai_Carrier         1191
Kus_AttackBomber    Tai_AssaultFrigate  2775
Kus_AttackBomber    Tai_AttackBomber    18
Kus_AttackBomber    Tai_Carrier         0
Kus_Carrier         Tai_AssaultFrigate  1354
Kus_Carrier         Tai_AttackBomber    8
Kus_Carrier         Tai_Carrier         0

Como faço para recuperar o "RoundTime" quando P1_ShipType é Kus_AttackBomber e P2_ShipType é Tai_Carrier?

No SQL isso é fácil, mas como você faz isso no Excel?

Encontrei uma maneira de fazer isso usando fórmulas aqui: link

Mas estou curioso para saber como conseguir isso usando tabelas dinâmicas ou VBA. Eu preciso ser capaz de executar algumas operações matemáticas nos valores retornados também.

Aqui está o UDF que eu desenho com base na resposta dada abaixo. Obrigado!

Function GetRoundTime(s1 As String, s2 As String, s3 As String) As String
    Dim i As Long
    'Need to find out what the last row is dynamically instead of hardcoding it at 1000
    For i = 2 To 1000
        If Worksheets(s3).Cells(i, "D").Value = s1 And Worksheets(s3).Cells(i, "I").Value = s2 Then
            GetRoundTime = CStr(Worksheets(s3).Cells(i, "K").Value)
            Exit Function
        End If
    Next i
    GetRoundTime = "Failed"
End Function
    
por posfan12 01.08.2016 / 11:56

2 respostas

1

Experimente este pequeno sub:

Sub FindFirstMatch()
    Dim i As Long
    Dim rw As Long, rt As Long
    Dim s1 As String, s2 As String
    s1 = "Kus_AttackBomber"
    s2 = "Tai_Carrier"

    For i = 2 To 10
        If Cells(i, "A") = s1 And Cells(i, "B") = s2 Then
            MsgBox "first match found on row # " & i & " with Round Time = " & Cells(i, "C").Value
            Exit For
        End If
    Next i
End Sub

    
por 01.08.2016 / 16:46
1

Você também pode usar uma fórmula de matriz:

{=INDEX(C:C,MATCH("Kus_AttackBomber Tai_Carrier",A:A&" "&B:B,0))}

deve fazer o que quiser sem ter que usar tabelas dinâmicas ou uma macro

    
por 01.08.2016 / 21:14