【发布时间】:2018-06-27 15:50:27
【问题描述】:
当初始活动单元格 (-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 范围,如果有一个精确的零,则不执行任何操作,否则找到具有最小负数的单元格(这是上面的等式所做的)并选择该单元格。
【问题讨论】:
-
使用
c = ActiveCell而不是c = ActiveCell.Select -
@DarrenBartrup-Cook 的观点是绝对正确的,不要
SelectActiveCell。我会更进一步说将ActiveWorkbook.ActiveSheet更改为ThisWorkbook.Sheets("YourSheetName")如果您的函数=MAX(IF...在特定范围内(例如“V16”),请直接引用该范围而不是使用ActiveCell。跨度> -
需要考虑的事情 - 它们肯定是同一个数字吗?是一个 -15.0 和另一个 -15.01。此外,值得设置一些其他
FIND参数:LookIn:=xlValues, LookAt:=xlWhole。 The settings for LookIn, LookAt, SearchOrder, and MatchByte are saved each time you use this method. If you do not specify values for these arguments the next time you call the method, the saved values are used.