Excelで扱うことの多い最大値Maxと最小値Minですが、実はVBAには関数が存在しません。そこで、Excelのワークシート関数を用いて、VBAでも最大値と最小値を求める方法をご紹介します。
VBAでMax,Minで最大値や最小値を求める
VBA関数も含め、VBAではメソッド・プロパティでもMax, Minというのは存在しません。そこで、Excel-VBAではExcelのワークシート関数Max, Minを「Application.WorksheetFunctionプロパティ」により使用します。例えば、セルB2~H8までのセルに記入された数値の最大値, 最小値を求めるマクロは下記のとおりです。
マクロ例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 |
- maxVal、minValを数字のみを扱うとする
-
Application.WorksheetFunctionでExcelのワークシート関数を以下使用する。
- Max、Min関数を用いる(Range関数は、データの範囲を決定しています。)
- 結果をメッセージボックスに示す
という手順になっています。セル範囲にある文字列は無視されます。また、文字列だけの場合は結果が0となります。コンピュータは数値に直せるもの以外は大小の比較ができません。文字列が比較不可能なのはこのためです。
Application.WorksheetFunctionの注意点
Application.WorksheetFunctionプロパティではMax, Min関数以外にもExcel関数を利用可能です。このプロパティを利用しないで値の最大値・最小値を求める方法もありますが、この場合はExcel関数を用いた方がマクロが簡単になります。しかし、使用する際には下記の点を考慮する必要があります。
・使用できるExcel関数は限られている。
・関数によっては書式が複雑になり、バグや処理速度低下の原因になる。
なるべくVBA関数を用いて、ワークシート関数を用いるのは最小限に抑える方がいいでしょう。