我是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
Run Code Online (Sandbox Code Playgroud)
在第一个屏幕截图中,单元格A10和A11显示A2:A8中的最大和最小值,单元格B10和B11显示列表中最大和最小值的地址.在这种情况下,地址是正确的.

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

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

如果我们以你的第二个例子为例:
您将 的值设置
smallest为7
您搜索包含7
的第一个单元格7位于72$A$7
检查Range.Find文档,您会看到有一个可选LookAt参数 - 这可以是xlWhole或xlPart- 目前默认为xlPart,因此包括其中任意位置包含 7 的单元格。(如果未包含,它会记住您最后使用的选项。)
所以,尝试以下几行:
Set FirstPlace = Range("A2:A8").Find(what:=Largest, LookAt:=xlWhole)
Set LastPlace = Range("A2:A8").Find(what:=Smallest, LookAt:=xlWhole)
Run Code Online (Sandbox Code Playgroud)