2017-04-13 126 views
0

我有一些简单的代码来查找范围的最大值,然后返回最大值所在的行。出于某种原因,有些情况下Match返回Error 2042,但大部分时间运行成功。当我搜索的值是同一范围的最大值时,它如何在范围内找不到匹配?为什么Application.Match()不一致?

范围中的值是具有许多有效数字的百分比(例如0.992149823976789%)。

Sub test() 

dim rng as range 

Set rng = Range("A1:A100") 

rng_max = application.max(rng) 

max_row = application.match(cdbl(rng_max), rng.value, 0) 

End Sub 
+1

如何为'rng_max'声明,你为什么要'cdbl(rng_max)',和它发生的时候你同时调用'max'和'match'(在'rng'或'rng.value'上,但不是两者)? – GSerg

+0

我还没有在任何地方声明rng_max。在我看到有关Match的问题的其他帖子后,我使用了CDbl。我只是尝试使用rng.value而不是rng来查看它是否有帮助,并且它确实适用于一些值,但显然不是全部。它可能什么都不做,但我也不认为它会受到伤害。 – user1964692

+1

尝试将'rng_max'声明为某物(比如'Double'),不要使用'CDbl'并且调用'max'和'match'在同一件事情上。 [浮点数学不会被破坏](http://stackoverflow.com/q/588004/11683),但是如果你先来来回地强迫数值,然后期望它们完全匹配,它将会是你的。 – GSerg

回答

-1

它好工作没有母校wheter我用cdbl()与否:

enter image description here

+0

[“它确实为少数值工作,但显然不是全部”](http://stackoverflow.com/questions/43399844/why-is-application-match-is-inconsistent#comment73860897_43399844) – GSerg

+0

显然不是所有的,因为我我无法测试它的“所有值”有无限实数是正确的吗? @GSerg – Moreno

+0

正确。这正是为什么你的说法“没有问题,我使用cdbl()或不”毫无意义。只有在所有可能的数字上进行测试,这才有意义。由于这是不可能的,你的答案不能证明任何事情。请参阅http://stackoverflow.com/q/588004/11683了解问题的根源。 – GSerg