当初始活动单元格(-15.0)中的值也是指定范围内的值时,我不确定下面的代码为什么会给出“未找到”消息。
Sub Test()
Dim c As Double
Dim srchRng As Range
With ActiveWorkbook.ActiveSheet
c = ActiveCell.Select
Set srchRng = .Range("V17:V37").Find(what:=c)
If srchRng Is Nothing Then
MsgBox "Not found"
End If
End With
End Sub
请注意,有时在指定范围内存在0值。如果是这样,我不需要做任何事情,但是如果0不存在,那么我首先需要找到最小的负值(我在工作表=MAX(IF(V17:V37<=0,V17:V37),MIN(V17:V37))
中单独使用,这成为我的初始活动单元格值[例如-15.0 ]在指定范围内查找),然后将此最小负值设置为零(通过在此单元格中使用目标搜索功能)
因此,此宏最终将包含一个If
语句或有条件的lookup
任何反馈表示赞赏。
我进行了建议的更改,但下面的修订代码仍返回“未找到”。 单元格V38的值为-15.0,但是此数字确实出现在范围V17:V37中。 这个简单的宏应导致该单元格处于与所选c值相对应的范围内。任何进一步的帮助表示赞赏。
Dim c As Double
Dim srchRng As Range
With ThisWorkbook.Sheets("Reel_Pack")
c = Range("V38")
Set srchRng = .Range("V17:V37").Find(what:=c)
If srchRng Is Nothing Then
MsgBox "Not found"
End If
End With
End Sub
我发现以下代码可以完成上述操作。
Dim c As Double
c = ThisWorkbook.Sheets("Sheet1").Range("V58").Value
Dim cel As Range
For Each cel In ThisWorkbook.Sheets("Sheet1").Range("V17:V57")
With cel
If .Value = c Then
.Select
End If
End With
Next cel
End Sub
但是有人可以建议如何通过在此宏中实际合并我在单元格V58中拥有的方程式来改善此问题吗?如前所述,等式为=MAX(IF(V17:V37<=0,V17:V37),MIN(V17:V37))
。
因此宏将查找范围V17:V37,如果存在精确的零,则“不执行任何操作”,否则找到负数最小的单元格(这是上面的方程式所做的),然后选择该单元格。
答案 0 :(得分:0)
我希望这是正确的原因:
c = ActiveCell.Select
返回的值-1
等于VBA中的TRUE
。
所以,我认为,该行在询问问题c = ActiveCell is Selected?
,该问题返回布尔TRUE / FALSE转换为等于-1的双精度值。
c = ActiveCell
返回ActiveCell
的默认属性Value
。
因此该行应读为c = ActiveCell
或c = ActiveCell.Value
而不是c = ActiveCell.Select
。
修改:
现在不太确定我的理由-c= Range("A1").Select
选择单元格A1并仍返回-1。
我想这就是为什么您应该避免像瘟疫那样Select
,除非您想实际选择一个单元格而不只是引用它。阅读How to avoid using Select in Excel VBA