【问题标题】:Excel VBA trying to find the address of the smallest value among a list of valuesExcel VBA试图在值列表中找到最小值的地址
【发布时间】:2018-09-23 03:51:42
【问题描述】:

我是 Excel VBA 编程的新手,在尝试使用 Find 方法捕获值列表中最小值的地址时遇到了问题。以下是我的代码,我包含了 3 个屏幕截图来说明问题。任何意见表示赞赏,在此先感谢!

Sub Max_Min_Test()

    Dim Largest As Long
    Dim Smallest As Long
    Dim FirstPlace As Range
    Dim LastPlace As Range

    Largest = WorksheetFunction.Max(Range("A2:A8"))
    Smallest = WorksheetFunction.Min(Range("A2:A8"))

    Range("A10").Value = Largest
    Range("A11").Value = Smallest

    Set FirstPlace = Range("A2:A8").Find(what:=Largest)
    Set LastPlace = Range("A2:A8").Find(what:=Smallest)

    Range("B10").Value = FirstPlace.Address
    Range("B11").Value = LastPlace.Address

End Sub

在第一个屏幕截图中,单元格 A10 和 A11 显示了 A2:A8 中的最大值和最小值,单元格 B10 和 B11 显示了列表中最大值和最小值的地址。在这种情况下,地址是正确的。

在第二个屏幕截图中,单元格 B10 正确显示了最大值的地址,但单元格 11 显示了错误的地址。 A7 代替 A8 显示为最小值的地址。

在第三个屏幕截图中,单元格 B10 仍然正确显示了最大值的地址,但单元格 B11 也显示了相同的地址。在我看来,我的代码不会捕获最小值的地址,而是捕获与最小值相同的第一个数字的值的地址...

【问题讨论】:

  • 我只能说看到第一篇文章令人耳目一新,其中包括清晰的解释、有用的截图,minimal reproducible example
  • 需要将Range.FindlookAt参数设置为xlWhole
  • 使用 VBA 的某些原因?这也可以通过公式来完成。

标签: excel vba


【解决方案1】:

如果我们以您的第二个例子为例:

您将smallest 的值设置为7
你搜索7
第一个包含7 的单元格是72 in $A$7

查看Range.Find 文档,您会看到有一个可选的LookAt 参数 - 这可以是xlWholexlPart - 目前默认为xlPart,因此包括包含7 任何地方在其中。 (如果不包括在内,它会记住您上次使用的选项。)

所以,试试这些行:

Set FirstPlace = Range("A2:A8").Find(what:=Largest, LookAt:=xlWhole)
Set LastPlace = Range("A2:A8").Find(what:=Smallest, LookAt:=xlWhole)

【讨论】:

  • 我的问题现在解决了!非常感谢您的帮助!
猜你喜欢
  • 2015-04-28
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 2014-04-18
相关资源
最近更新 更多