【问题标题】:Why is Application.Match() is inconsistent?为什么 Application.Match() 不一致?
【发布时间】:2017-04-13 19:01:22
【问题描述】:

我有一些简单的代码来查找范围的最大值,然后返回最大值所在的行。出于某种原因,在某些情况下Match 返回Error 2042,但大多数情况下它运行成功。当我正在搜索的值是同一范围的最大值时,它如何在一个范围内找不到匹配项?

该范围内的值是具有许多有效数字的百分比(例如 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

【问题讨论】:

  • rng_max 是如何声明的,为什么要申请 cdbl(rng_max),当您在同一件事上同时调用 maxmatch 时会发生这种情况(rngrng.value,但不是两者都有)?
  • 我没有在任何地方将 rng_max 声明为任何东西。在我在这里看到一篇关于 Match 问题的不同帖子后,我使用了 CDbl。我只是尝试使用 rng.value 而不是 rng 来查看它是否会有所帮助,并且它确实适用于一些值,但显然不是全部。它可能无济于事,但我也不认为它一定会受到伤害。
  • 尝试将rng_max 声明为某种东西(如Double),不要使用CDbl 并在同一事物上调用maxmatchFloating point math is not broken,但是如果您首先来回强制值,然后期望它们完全匹配,那么它将适合您。
  • 啊,好酷。现在看来可以了。

标签: excel vba types max match


【解决方案1】:

无论我是否使用cdbl(),它都能正常工作:

【讨论】:

  • 显然不是全部,因为我无法测试它的“所有值”,所以有无限的实数对吗? @GSerg
  • 正确。这就是为什么你说它“无论我是否使用 cdbl() 都能正常工作”的说法毫无意义。只有在所有可能的数字上测试它才有意义。由于这是不可能的,因此您的回答并不能证明任何事情。问题根源请参考stackoverflow.com/q/588004/11683
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 2013-03-09
  • 2020-02-29
  • 2014-07-05
  • 2018-08-05
相关资源
最近更新 更多