Excel VBA - 如果范围包含DOUBLE值,则查找范围内的最大值(或任何特定值)的地址

时间:2017-05-16 06:59:21

标签: excel vba double comparison

问题:

有一个双值范围。我想得到最大值的地址。 我尝试使用匹配功能,但它无法比较双打(给出错误的结果),而且我的范围没有被排序。

有一些丑陋的解决方案(例如我可以将我的数字乘以10000,如果我想要5位精度,那么得到整数部分并进行比较,但是它超过20000行非常慢)也许还有更多优雅的解决方案。

谢谢:)

示例数据:这些是Debug.Print之后的数字

B 7.59999999999934E-02  
C 7.00000000000074E-02  
D 0.335000000000008  
E 8.19999999999936E-02  
F 8.49999999999937E-02  
G 7.39999999999981E-02  
H 5.49999999999926E-02  
I 0.070999999999998  
J 0.165000000000006  
K 7.59999999999934E-02  

2 个答案:

答案 0 :(得分:0)

为什么不迭代你的范围并在下一个单元格double值更大时更改变量?完成此范围后,使用find返回单元格行和列。见下文

Dim i as Variant 
For Each i In Worksheets("yourWorkSheet").Range(Range("youStartCell"), Range("yourStartCell").End(xlDown)).Cells
  If i.Offset(-1) < i Then
      i = i.value
  End if
Next

应该看起来像这样。需要在循环中处理第一行的情况,但如果我这样做你将没有工作要做。

答案 1 :(得分:0)

This is my final solution:

    'Find max and its address in range
Public Function maxAddress(rng As Range) As DoubleLong

Dim cell As Range

For Each cell In rng
    If IsNumeric(cell.Value2) Then
        If cell.Value2 > maxAddress.db Then
            maxAddress.db = cell.Value2
            maxAddress.lg = cell.Row
        End If
    End If
Next cell
End Function

where is defined a type:

Public Type DoubleLong
    db As Double
    lg As Long
End Type