Excel VBAで指定した範囲の最大値・最小値を取得する:Max, Min

Excelで扱うことの多い最大値Maxと最小値Minですが、実はVBAには関数が存在しません。そこで、Excelのワークシート関数を用いて、VBAでも最大値と最小値を求める方法をご紹介します。

VBAでMax,Minで最大値や最小値を求める

VBA関数も含め、VBAではメソッド・プロパティでもMax, Minというのは存在しません。そこで、Excel-VBAではExcelのワークシート関数Max, Minを「Application.WorksheetFunctionプロパティ」により使用します。例えば、セルB2~H8までのセルに記入された数値の最大値, 最小値を求めるマクロは下記のとおりです。

マクロ例:

Sub Max_Min_Sample()

  Dim maxVal As Long, minVal As Long

  'Excelのワークシート関数を使う
  With Application.WorksheetFunction

  'セルB2~H8までのセルに記入された数値の最大値, 最小値を求める
       maxVal = .Max(Range(Cells(2, 2), Cells(8, 8)))

       minVal = .Min(Range(Cells(2, 2), Cells(8, 8)))

  End With

  MsgBox "最大値:" & maxVal & vbCrLf & "最小値:" & minVal

End Sub
  1. maxVal、minValを数字のみを扱うとする
  2. Application.WorksheetFunctionでExcelのワークシート関数を以下使用する。

  3. Max、Min関数を用いる(Range関数は、データの範囲を決定しています。)
  4. 結果をメッセージボックスに示す

という手順になっています。セル範囲にある文字列は無視されます。また、文字列だけの場合は結果が0となります。コンピュータは数値に直せるもの以外は大小の比較ができません。文字列が比較不可能なのはこのためです。

 Application.WorksheetFunctionの注意点

Application.WorksheetFunctionプロパティではMax, Min関数以外にもExcel関数を利用可能です。このプロパティを利用しないで値の最大値・最小値を求める方法もありますが、この場合はExcel関数を用いた方がマクロが簡単になります。しかし、使用する際には下記の点を考慮する必要があります。

・使用できるExcel関数は限られている。
・関数によっては書式が複雑になり、バグや処理速度低下の原因になる。

なるべくVBA関数を用いて、ワークシート関数を用いるのは最小限に抑える方がいいでしょう。


イベント

2017/12/05(火)
Design Thinking Square