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