不确定为什么会收到无效的预选赛错误?只需在一个数字范围内寻找最小负值,然后选择(请注意,每个单元格中的ea号是公式的结果)
Sub Test()
Dim c As Double
c = .Find(What:=ActiveSheet.Evaluate("=LARGE(V17:V57,COUNTIF(V17:V57,"">0"")+1)"), LookIn:=xlValues)
If c <> 0 Then
c.Select
End If
End Sub
基于到目前为止的评论,代码现在如下
Sub Test()
Dim c As Variant, a As Variant
c = ActiveSheet.Evaluate("LARGE(V17:V57,COUNTIF(V17:V57,"">0"")+1)")
Debug.Print c
a = Application.Match(-0.199999999999818, "V17:V57", 0)
'a = Application.Match(c, ActiveSheet.Range("V17:V57"))
If IsError(a) Then Exit Sub
Debug.Print ActiveSheet.Range("V17:V57").Cells(a, 1).Address
End Sub
答案 0 :(得分:1)
.Find
是Range对象的一种方法。
您需要传递一个范围对象。
常规格式为:
Option Explicit
Sub Test()
Dim c As Range
Set c = ActiveSheet.Range("V17:V57").Find(What:="letter", LookIn:=xlValues)
If Not c Is Nothing Then
c.Select
End If
End Sub
请注意,c
是一个范围对象,是.Find
方法返回的对象。 ActiveSheet.Range("V17:V57")
中的示例搜索范围。
您测试是否通过Is Nothing
找到了一个值,就像找不到该值一样,范围对象c将被设置为空。
如果=LARGE(V17:V57,COUNTIF(V17:V57,">0")+1)
公式产生的错误值是Evaluate
,那么您需要处理一个可能的错误值。否则,您将得到一个错误。
例如:
Option Explicit
Sub Test()
Dim c As Range, a As Variant
a = ActiveSheet.Evaluate("LARGE(V17:V57,COUNTIF(V17:V57,"">0"")+1)")
If IsError(a) Then Exit Sub
Set c = ActiveSheet.Range("V17:V57").Find(What:= a, LookIn:=xlValues)
If Not c Is Nothing Then
c.Select
End If
End Sub
请确保将列的格式设置为显示小数位,以便“查找”可以准确匹配。
请参阅讨论here。
如果您无法格式化工作表以显示所需的小数位数,请尝试使用“匹配”。抱歉,我在下面有c和另一个。
Option Explicit
Sub Test()
Dim c As Variant, a As Variant
c = ActiveSheet.Evaluate("LARGE(V17:V57,COUNTIF(V17:V57,"">0"")+1)")
a = Application.Match(c, ActiveSheet.Range("V17:V57"))
If IsError(a) Then Exit Sub
Debug.Print ActiveSheet.Range("V17:V57").Cells(a, 1).Address
End Sub
答案 1 :(得分:0)
要使用整个工作表范围,请尝试此操作。
ValueError: The number of passed axes must be 3, the same as the output plot