编写宏时,可以通过使用WorksheetFunction方法应用MIN工作表函数来找到一系列单元格中的最小值。但是,您可能不仅需要找到该范围内的最小值,还需要找到包含该值的第一个单元格的地址。

一种简单的方法是简单地逐步遍历要检查的范围,并得出最小值和要检查的单元格的地址,如下所示:

Function FindLowestAddr(pRng As Range) As String     Dim MinVal As Double     Dim MinAddr As String     Dim c As Range

MinVal = pRng.Cells(1).Value     MinAddr = pRng.Cells(1).Address     For Each c in pRng         If c.Value < MinVal Then             MinVal = c.Value             MinAddr = c.Address         End If     Next c     FindLowestAddr = MinAddr End Function

请注意,此方法完全不依赖MIN工作表功能。但是,它有一个缺点-它不能区分包含数字值的单元格和不包含数字值的单元格。换句话说,如果传递给函数的范围包含空白单元格,则该单元格将被视为包含零值,该值很可能是该范围内的最小值。

解决此问题的一种方法是依赖宏中的工作表函数。下面的宏使用MIN和MATCH工作表函数来确定最小值的位置,然后确定该单元格在范围内的索引(偏移)。

Function GetAddr(rng As Range) As String     Dim dMin As Double     Dim lIndex As Long     Dim sAddress As String

With Application.WorksheetFunction         dMin = .Min(rng)

lIndex = .Match(dMin, rng, 0)

End With     GetAddr = rng.Cells(lIndex).Address End Function

应该注意的是,如果您使用宏只是为了发现地址,因为您认为没有宏就无法获得所需的信息,那么您可以通过使用工作表公式完全删除宏。例如,如果要确定命名范围MyRange中值最低的单元格的地址,可以使用以下命令:

=ADDRESS(ROW(MyRange)+MATCH(MIN(MyRange),MyRange,0)-1,COLUMN(MyRange))

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(12744)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处找到适用于Excel的较早菜单界面的本技巧的版本: