查找范围中最低值的地址(Microsoft Excel)
编写宏时,可以通过使用WorksheetFunction方法应用MIN工作表函数来找到一系列单元格中的最小值。但是,您可能不仅需要找到该范围内的最小值,还需要找到包含该值的第一个单元格的地址。
一种简单的方法是简单地逐步遍历要检查的范围,并得出最小值和要检查的单元格的地址,如下所示:
Function FindLowestAddr(pRng As Range) As String Application.Volatile 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 Application.Volatile 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培训的来源。
本技巧(7140)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: