Функция поиска в VBA (Excel) не найдет минимальное значение - PullRequest
0 голосов
/ 11 декабря 2018

Я пробовал это много раз, но у меня не получается.Чего я хочу добиться: найдите минимальное значение в определенном столбце 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 голосов
/ 11 декабря 2018

Рабочие листы 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
0 голосов
/ 11 декабря 2018

Вот так вы найдете номер строки 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, иначе вы столкнетесь с проблемами с плавающей запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...