找到符合两个条件的行


0

我有一个工作表,其数据类似于以下内容:

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

当P1_ShipType为Kus_AttackBomber且P2_ShipType为Tai_Carrier时,如何检索“RoundTime”?

在SQL中这很简单,但是如何在Excel中执行此操作?

我在这里找到了使用公式的方法:https//support.microsoft.com/en-us/kb/214142

但我很好奇我将如何使用数据透视表或VBA实现这一目标。我还需要能够对返回的值执行一些数学运算。

这是我根据下面给出的答案设计的UDF。谢谢!

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

听起来像一个数据透视表会有所帮助
戴夫

数据透视表:只需创建与原始数据相同的布局,并过滤所需的值。VBA:这不是剧本创作服务,我们不写整个宏只是为了满足好奇心
队友Juhász

如果将UDF中的S3更改为值的整个范围,则可以通过计算范围中的行来计算1000。
Joost

Answers:


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

在此输入图像描述


我使用此代码作为创建UDF的基础。谢谢。
posfan12 2016年

@ posfan12非常好!_________________________
Gary的学生

1

您还可以使用数组公式:

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

应该做你想要的,而不必使用数据透视表或宏

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.