在VBA(Excel)中查找功能无法找到最小值

时间:2018-12-11 13:00:28

标签: excel vba excel-vba

我已经尝试了很多次,但是没有成功。 我要实现的目标:在特定列F:F中找到最小值,然后获取该值所在的行号(或范围地址)。

注意:变量rngMinimumVariableEins必须重新格式化,因为该值非常小。

Dim rngMinimumVariableEinsWert As Range
Dim strResultValue As String
Dim rngMinimumVariableEins As Range

Set rngMinimumVariableEins = Worksheets("Berechnung").Range("F:F")
rngMinimumVariableEins.NumberFormat = "0.00000000000000000000000000"
strResultValue = Application.WorksheetFunction.Min(rngMinimumVariableEins)
Debug.Print strResultValue

Set rngMinimumVariableEinsWert = rngMinimumVariableEins.Find(strResultValue, LookIn:=xlValues, LookAt:=xlPart)
If rngMinimumVariableEinsWert Is Nothing Then
    Debug.Print "No Results"
Else
    Debug.Print rngMinimumVariableEinsWert.Row
End If

2 个答案:

答案 0 :(得分:1)

Excel工作表的有效浮点数限制为15个数字,您从不不能可靠地在真实数字列中找到一个看起来像数字的字符串。

dim minpos as variant

with Worksheets("Berechnung").range("F:F")
    minpos = application.match(application.min(.cells.value2), .cells, 0)
end with

If iserror(minpos) Then
    Debug.Print "No Results"
Else
    Debug.Print minpos
End If

答案 1 :(得分:0)

这是在范围RowOfMin中找到最小值的行号RangeToSearch的方式:

Option Explicit

Public Sub FindMinimum()
    Dim RangeToSearch As Range
    Set RangeToSearch = Worksheets("Berechnung").Columns("F")

    Dim RowOfMin As Long

    On Error Resume Next
    With Application.WorksheetFunction
        RowOfMin = .Match(.Min(RangeToSearch), RangeToSearch, 0)
    End With
    On Error GoTo 0

    If RowOfMin = 0 Then
        Debug.Print "No number values in column F"
    Else
        Debug.Print RowOfMin
    End If
End Sub

请注意,必须避免将最小值转换为另一种数据类型(例如,通过将其写入变量),而应将其直接用于.Match,否则会遇到浮点问题。