我有以下方法可以找到范围中的最大值和最小值。然后我使用这些值来定位它们所在的实际单元格,因为我需要从该列的标题单元格中获取值。 Range.Find始终返回Nothing,即使被搜索的范围具有该值的CELL。
EditText
代码行
android:selectAllOnFocus="true"
总是返回任何内容,但我已经确认存在具有该值的单元格。一个例子,单元格值是66,152.61(在单元格中显示为66,153),bestPnL变量是66,152.61,所以我尝试将bestPnL四舍五入到66,153,但仍然没有找到它。调试语句显示tempRange具有正确的范围,因此它不会在错误的位置搜索。
我唯一能想到的是带有值的单元格,从一个非常长的公式中获取它的值,使用十几个命名范围,这可能会污染find方法吗?
就是这样我们都知道我并不疯狂,这里是我正在测试我所在地的部分范围的快照。
修改 根据Tim Williams的建议,我在Find调用之前更改了搜索范围的数字格式。
Sub GetTopAndBottomFiveCommodities()
Dim tempRange As Range, x As Integer, bestPnL As Double, worstPnL As Double
Dim strTopRangeName As String, strBottomRangeName As String
Dim cCell As Range, commodityName As String
Set tempRange = dataSourceSheet.Range("A:A").Find(What:="Year Totals")
Set tempRange = Range(tempRange.Offset(0, 1), tempRange.End(xlToRight).Offset(0, -1))
For x = 1 To 5
strTopRangeName = "TopCommodity" & CStr(x)
strBottomRangeName = "BottomCommodity" & CStr(x)
bestPnL = WorksheetFunction.Large(tempRange, x)
worstPnL = WorksheetFunction.Small(tempRange, x)
Debug.Print tempRange.Address
' get the top commodity name and PnL
**Set cCell = tempRange.Find(What:=bestPnL, LookIn:=xlValues)**
commodityName = dataSourceSheet.Cells(5, cCell.Column).Value
Range(strTopRangeName).Value = commodityName
Range(strTopRangeName).Offset(0, 1).Value = bestPnL
Next x
End Sub
然后查找调用正常工作。然后,我在例行程序结束时将数字格式放回到我想要的方式。
Set cCell = tempRange.Find(What:=bestPnL, LookIn:=xlValues)
现在按预期工作。
答案 0 :(得分:2)
尝试从单元格上的数字格式中删除千位分隔符。当我在测试范围内这样做时,它工作正常,但是使用分隔符却找不到值。
Set f = rng.Find(what:=bestPnL, LookIn:=xlFormulas)
即使使用千位分隔符也能正常工作(编辑:仅适用于硬编码值;使用公式失败)。
EDIT2:这对我来说有千位分隔符,并使用值的公式(EDIT3!:不适用于货币格式)。
Sub Tester()
Dim f As Range, v, rng As Range
Set rng = Range("C3:C21")
v = Application.Large(rng, 3)
v = Format(v, rng.Cells(1).NumberFormat)
Set f = rng.Find(what:=v, LookIn:=xlValues)
Debug.Print f.Address ' >> C19
End Sub
答案 1 :(得分:0)
这是一个古老的问题,但是我找到了在某些情况下有效且简单的替代方法:
dim idx as long, rng as range
set rng = someRange
idx = application.WorksheetFunction.Match(1234,rng,0)
这将在提供的范围内返回FIRST 1234值单元格的相对位置,而与格式无关。最后一个0表示您使用完全匹配。