ExcelでMAXIFとMINIFを使う
《2008/07/09に高速化版を再掲載していますので、内容理解より処理速度を優先する場合はこちらを参照下さい》
要は、SUMIF的な感じで指定範囲の最大値or最小値を返す関数。
VlookupやHlookupのような柔軟性のある関数にしてもよかったケド、納期の関係で限定的な機能になりました。これをベースにもっと汎用的な関数へ改造してお使い下さい(ぉ
MAXIF関数
Function MAXIF(ScanCells As Range, _ KeyWord As Variant, _ CalcCells As Range) As Variant ' 条件付きMax関数 Dim Y As Long Dim MaxVal As Variant Dim ChkVal As Variant Dim CmpVal As Variant MaxVal = "" Y = 1 While (Y <= ScanCells.Rows.Count) And (Y <= CalcCells.Rows.Count) ChkVal = ScanCells.Cells(Y, 1).Value If ChkVal = KeyWord Then CmpVal = CalcCells.Cells(Y, 1).Value If Not IsNull(CmpVal) Then If CmpVal <> "" Then If MaxVal = " " Or _ MaxVal < CmpVal Then MaxVal = CmpVal End If End If End If End If Y = Y + 1 Wend If MaxVal <> " " Then MAXIF = MaxVal Else MAXIF = "" End If End Function
MINIF関数
Function MINIF(ScanCells As Range, _ KeyWord As Variant, _ CalcCells As Range) As Variant ' 条件付きMin関数 Dim Y As Long Dim MinVal As Variant Dim ChkVal As Variant Dim CmpVal As Variant MinVal = "" Y = 1 While (Y <= ScanCells.Rows.Count) And (Y <= CalcCells.Rows.Count) ChkVal = ScanCells.Cells(Y, 1).Value If ChkVal = KeyWord Then CmpVal = CalcCells.Cells(Y, 1).Value If Not IsNull(CmpVal) Then If CmpVal <> "" Then If MinVal = " " Or _ MinVal > CmpVal Then MinVal = CmpVal End If End If End If End If Y = Y + 1 Wend If MinVal <> " " Then MINIF = MinVal Else MINIF = "" End If End Function
それぞれ、ScanCellsに比較対象のセル(単列複数行)、KeyWordにScanCellsから選択するデータ(文字列等)、CalcCellsにMax/Min判定対象のセル(単列複数行)を指定。
「=MAXIF(A2:A12, "合計", B2:B12)」とすると、A列が"合計"の行のB列のうち最大の値が返るというイメージ。