Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 问题。查找函数在搜索范围内的最大值时返回错误_Excel_Vba - Fatal编程技术网

Excel 问题。查找函数在搜索范围内的最大值时返回错误

Excel 问题。查找函数在搜索范围内的最大值时返回错误,excel,vba,Excel,Vba,我试图找到并定义一行,该行描述范围内的最大值。范围是一列带有小数点的数字,这些小数点被导入到工作表中。我可以找到最大值,但当我尝试定义它所在的行时,.find函数返回“object variable or with block variable not set” 我知道如果找不到该值,将返回此错误。.Find操作之前的MsgBox dMax显示它已找到该范围的最大值 数据集是一系列长的正负非整数,例如-0.59439647479286。我已确保数据格式为“通用” 有人能指出我做错了什么吗?.fi

我试图找到并定义一行,该行描述范围内的最大值。范围是一列带有小数点的数字,这些小数点被导入到工作表中。我可以找到最大值,但当我尝试定义它所在的行时,.find函数返回“object variable or with block variable not set”

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

数据集是一系列长的正负非整数,例如-0.59439647479286。我已确保数据格式为“通用”


有人能指出我做错了什么吗?.find函数似乎找不到最大值。

使用工作表的匹配函数查找包含最大值的行

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 
您自己的代码可能遇到浮点十进制问题


注意使用With,End With block
.Range(“A2:A10000”)
ActiveSheet中。Range(“A2:A10000”)
实际上是工作表上的
.Range(“A3:A1001”)
,在第二次使用
Range(“A2:A10000”)
时,您缺少前缀

,请使用工作表的匹配功能查找包含最大数量的行

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 
您自己的代码可能遇到浮点十进制问题

注意使用With,End With block
.Range(“A2:A10000”)
ActiveSheet中。Range(“A2:A10000”)
实际上是工作表上的
.Range(“A3:A10001”)
,在第二次使用
范围(“A2:A10000”)
时,您在搜索范围之外引用了一个“After”值。您只需删除此命名参数,或将其更改为

HighPoint = Range("A2:A10000").Find(What:=dMax, After:=Cells(2, 1), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Row
您正在引用搜索范围之外的“After”值。您只需删除此命名参数,或将其更改为

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

使用将您的
更改为:
使用ActiveSheet
并使用
高点=Application.MATCH(Application.MAX(.Range(“A:A”),.Range(“A:A”),0)
非常棒,谢谢!应该用Match代替。如果数据集中可能有两个相同的最大值,您会做什么更改?另外,请尝试使用
LookIn:=xlFormulas
更改为
With ActiveSheet
并使用
HighPoint=Application.MATCH(Application.max(.Range(“a:a”),.Range(“a:a”),0
谢谢!应该用Match代替。如果数据集中有两个相同的最大值,您会做什么更改?另外,请尝试
LookIn:=xlFormulas
感谢您的反馈。看起来match是此应用程序的一个更好的功能。感谢您的反馈。看起来match对于这个应用程序来说是一个更好的功能。而且这也不是完全相关的,但它可能会在将来帮助您。如果您正在使用MsgBox显示中间值以检查错误,请将其替换为Debug.Print可能会为您节省一些时间(这些值显示在即时窗口中,通过在Windows上按cntrl+G来显示)。感谢您提供的提示,这并不完全相关,但将来可能会对您有所帮助。如果您使用MsgBox显示中间值以检查错误,请将其替换为Debug.Print可能会为您节省一些时间(这些值显示在即时窗口中,通过在Windows上按cntrl+G显示),感谢您的提示