マクロを作成する場合、WorksheetFunctionメソッドを使用してMINワークシート関数を適用することにより、セルの範囲内で最小値を見つけることができます。ただし、範囲内の最小値だけでなく、その値を含む最初のセルのアドレスも見つける必要がある場合があります。

簡単な方法の1つは、次のように、調査する範囲をステップスルーして、調査対象のセルの最小値とアドレスの両方を導出することです。

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ワークシート関数にまったく依存していないことに注意してください。ただし、これには欠点があります。数値を含むセルと含まないセルを区別しません。つまり、関数に渡される範囲に空白のセルが含まれている場合、そのセルにはゼロ値が含まれていると見なされます。これは、範囲内の最小値である可能性があります。

これを回避する1つの方法は、マクロ内からワークシート関数に依存することです。次のマクロは、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_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(7140)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。