我正在尝试获取包含特定值的单元格的地址:
dim MinAdrress as Range
Set MinAddress = DetractRow.Find(Min_1, , xlValues, xlWhole)
Min_1
为0.23,DetractRow
范围包含以下值:
30% 26% 23% 27% -7%
所以MinAddress应该是范围内的第3个单元格。但是,在“本地”窗口中,我将其视为Nothing
。我也试过没有可选的参数(xlValues, xlWhole
),结果相同。非常感谢任何输入
答案 0 :(得分:1)
根据我的评论,我相信Find
函数将匹配单元格的值,因为它是由该单元格格式化的。所以除非你做了一些额外的工作,否则 0.23 将找不到 23%。例如,这可以起作用:rng.Cells.Find("23%", rng.Cells(1), xlValues, xlWhole, xlRows, xlNext, True)
。我听说过人们采取的各种各样的,非常奢侈的行动,尤其是当谈到找到日期时(我甚至听说过人们阅读单元格格式,清除它们,然后在Find
结束时重写它们。)
我不是Find
功能的忠实粉丝。人们可以尽一切努力,例如,创建一个值String
,以匹配特定的单元格格式,只发现你或其他人决定再多一个小数位会更好。下沉Find
sub。
我仍然倾向于将值读入数组并For ... Next
循环,尤其是Value2
为您提供选项,例如,以Long
形式搜索日期,这样就没有了格式化问题的风险。
以下是您的代码:
Dim v As Variant
Dim r As Long
Dim c As Long
'If DetractRow range is just one column
v = DetractRow.Value2
For r = 1 To UBound(v, 1)
If v(r, 1) = Min_1 Then
MsgBox "Gotcha at index " & CStr(r)
Exit For
End If
Next
'If DetractRow range is just one row
v = DetractRow.Value2
For c = 1 To UBound(v, 2)
If v(1, c) = Min_1 Then
MsgBox "Gotcha at index " & CStr(c)
Exit For
End If
Next
'If DetractRow range is more than one row and column
v = DetractRow.Value2
For c = 1 To UBound(v, 2)
For r = 1 To UBound(v, 1)
If v(r, c) = Min_1 Then
MsgBox "Gotcha at index " & CStr(r) & _
", " & CStr(c)
Exit For
End If
Next
Next