【问题标题】:Excel-VBA to find and return fastest race timeExcel-VBA 查找并返回最快的比赛时间
【发布时间】:2018-04-18 09:03:23
【问题描述】:
目的:查询比赛数据并返回每个班级的最快车队时间。
以前的研究:已经搜索了多个论坛,但没有找到任何相关的内容。
说明:我正在尝试创建一个可以读取数据集的宏,然后查看类别列,找到该类别的最快时间,然后将其返回到指定的单元格。
示例(参考图片):
这就是手动完成的方式
在表中找到最快的 4x-;
- 在 C 列搜索 4x-(忽略前面的文本(例如 IM2. 、W.J18A. 等))
- 在第一列搜索最快的时间
- 将最快时间返回到单元格 P8
任何帮助将不胜感激!
【问题讨论】:
标签:
excel
excel-formula
excel-2016
vba
【解决方案1】:
您不需要 VBA 来执行此操作。
但是您还需要一列(可以隐藏)。例如,让N 列成为具有附加信息的列。它将由来自C 列的最后三个字母组成(因为我们对最后的4x- 感兴趣)。因此,在N 列中,您需要粘贴这样的公式:=right(C3, 3)(它适用于N3 单元格,但您明白了)。有了这个,在P8你需要输入公式:
=MAX(IF(N:N=O8, I:I))
这意味着,仅对那些匹配O8 中的值的人取最大值,即4x-。
【解决方案2】:
您可以使用以下用户定义函数(只需将代码放入标准公式中即可)。要在工作表中使用它,请在 P6 中输入公式 - 比如说 - =Fastest_from_cat($C$4:$I$100,O6)
Public Function Fastest_from_cat(rng As Range, cat As String) As Double
Dim I As Long, col As Long
Dim Arr, tim As Double
tim = 999
Arr = rng.Value2
col = UBound(Arr, 2)
For I = 1 To UBound(Arr)
If Right(Arr(I, 1), Len(cat)) = cat And IsNumeric(Arr(I, col)) Then _
If Arr(I, col) < tim Then tim = Arr(I, col)
Next I
Fastest_from_cat = tim
End Function