Проблемы с функцией .ind, возвращающей ошибки при поиске максимального значения в диапазоне - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь найти и определить строку, которая описывает максимальное значение в диапазоне.Диапазон представляет собой столбец чисел с десятичными точками, который импортируется в лист.Я могу найти максимальное значение, но функция .Find возвращает «переменную объекта или переменная блока не установлена», когда я пытаюсь определить строку, в которой она находится.

Я знаю, что эта ошибка возвращается, если значениене найден.MsgBox dMax непосредственно перед операцией .Find показывает, что он нашел максимальное значение для диапазона.

Набор данных представляет собой серию длинных положительных и отрицательных нецелых чисел, например, -0,594396474479286.Я гарантировал, что формат данных «общий».

'finding highpoint

Dim dMax As Double
Dim HighPoint As Long

   With ActiveSheet.Range("A2:A10000")
        dMax = WorksheetFunction.Max(.Range("A2:A10000"))

        MsgBox dMax

        If dMax > 0 Then

         HighPoint = Range("A2:A10000").Find(What:=dMax, After:=.Cells(1, 1), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Row


        End If
    End With

Может кто-нибудь указать на то, что я здесь сделал неправильно?Кажется, что функция .find не может найти максимальное значение ..

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы ссылаетесь на значение «После» вне диапазона поиска.Вы можете просто удалить этот именованный параметр или изменить его на

HighPoint = Range("A2:A10000").Find(What:=dMax, After:=Cells(2, 1), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Row
0 голосов
/ 14 февраля 2019

Используйте функцию соответствия листа, чтобы найти строку, содержащую максимальное число.

Dim dMax As Double
Dim HighPoint As Long

With ActiveSheet.Range("A:A")

    dMax = application.Max(.cells)
    MsgBox dMax

    If dMax > 0 Then

        HighPoint = application.Match(application.Max(.cells), .cells, 0)

    End If
End With

debug.print HighPoint 

Ваш собственный код может страдать от десятичной проблемы с плавающей запятой.

Наблюдайте за использованием с, Конец с блоками..Range("A2:A10000") в пределах ActiveSheet.Range("A2:A10000") на самом деле .Range("A3:A10001") на листе, и вы пропустили префикс . при втором использовании Range("A2:A10000").

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