範囲内の最小値のアドレスを見つける(Microsoft Excel)
マクロを作成する場合、WorksheetFunctionメソッドを使用してMINワークシート関数を適用することにより、セルの範囲内で最小値を見つけることができます。ただし、範囲内の最小値だけでなく、その値を含む最初のセルのアドレスも見つける必要がある場合があります。
簡単な方法の1つは、次のように、調査する範囲をステップスルーして、調査対象のセルの最小値とアドレスの両方を導出することです。
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ワークシート関数にまったく依存していないことに注意してください。ただし、これには欠点があります。数値を含むセルと含まないセルを区別しません。つまり、関数に渡される範囲に空白のセルが含まれている場合、そのセルにはゼロ値が含まれていると見なされます。これは、範囲内の最小値である可能性があります。
これを回避する1つの方法は、マクロ内からワークシート関数に依存することです。次のマクロは、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_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]
。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(12744)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。
link:/ excel-Finding_the_Address_of_the_Lowest_Value_in_a_Range [範囲内の最小値のアドレスを検索]
。