У меня есть лист с данными, похожими на следующие:

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

Как получить "RoundTime", когда P1_ShipType - Kus_AttackBomber, а P2_ShipType - Tai_Carrier?

В SQL это легко, но как вы делаете это в Excel?

Я нашел способ сделать это, используя формулы здесь: https://support.microsoft.com/en-us/kb/214142

Но мне любопытно, как бы я достиг этого, используя сводные таблицы или VBA. Мне нужно иметь возможность выполнять некоторые математические операции с возвращаемыми значениями.

Вот дизайн UDF I, основанный на ответе, приведенном ниже. Спасибо!

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

2 ответа2

1

Вы также можете использовать формулу массива:

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

следует делать то, что вы хотите, без необходимости использовать сводные таблицы или макрос

1

Попробуйте этот маленький саб:

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

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