搜索范围内的最大值时,.Find函数返回错误的问题

时间:2019-02-13 21:06:35

标签: excel vba

我正在尝试查找并定义一行描述范围内最大值的行。范围是一列带小数点的数字,该数字被导入到工作表中。我可以找到最大值,但是当我尝试定义它所在的行时,.Find函数将返回“对象变量或未设置块变量”。

我知道如果找不到该值,则会返回此错误。 .Find操作之前的MsgBox dMax表明它已找到该范围的最大值。

数据集是一系列长的正负非整数,例如-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 :(得分:1)

使用工作表的“匹配”功能找到包含最大数量的行。

    private static IDocumentStore store = new DocumentStore()
    {
        Urls = new[] { "url" },
        Database = "DatabaseName"
    }.Initialize();

您自己的代码可能遇到浮点十进制问题。

注意使用With,End With块。 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")时您缺少前缀.

答案 1 :(得分:1)

您引用的搜索范围之外的“后”值。您可以简单地删除此命名参数,或将其更改为

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