我有一个工作表,其数据类似于以下内容:
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
