MAX関数で配列の中の最大値を探す方法!VBAコードも紹介!

こちらの記事で、MAX関数やMIN関数を使った場合の日付の取り扱いを解説しました。

MAX関数やMIN関数は配列に対しても使うことができるのです。

本記事では、「配列の中から最大値や最小値を探す方法」について解説します。

ワークシート上で解決するケースのほか、マクロを組むケースも考えてVBAコードを紹介しますね。

1.配列とは

こんにちは。エクセルマン・ブリーダーのしもむぎ(@re_znd13)です。

まずは配列とはなにか?について見ていきましょう。

配列とは文字列や数値を入れる器のようなものです。

というと、変数と違うの?と思われるかもしれませんね。

変数は入れられる値がひとつでした。

配列は値を複数入れられるという点が特徴です。

配列には1次元、2次元、・・・という風に次元があります。

1次元は1行分(もしくは1列分)の値の群をいいます。

2次元は複数行×複数列分の値の群をいいます。

エクセルのワークシートを想像すると、2次元までの配列はイメージがつきやすいかもしれません。

2.配列中の最大値をMAX関数で求めよう(ワークシート上のケース)

次のようなケースを考えてみます。

性別とそれぞれのBMIを表したものです。

この中からBMIの最大値を探したい場合、どうしますか?

配列を使う場合、下の式を入力して、shift+ctrl+Enterを押して確定します。

=MAX(B2:B6)

shift+ctrl+Enterによって、配列として扱うことになります。

この場合、式が{ }で自動的に括られて表示されます。

ただ、1次元の配列として扱う場合だとあまりうまみがありませんね。

配列の得意とするところで、女性のBMIの最大値を求めることを考えてみましょうか。

下の式を入力して、shift+ctrl+Enterで確定してみてください。

この式では、配列のうちA列の要素が女性であるかを見て、それがTrueの場合に、B列の要素を取り出しています。

その中からMAX関数で最大値を取り出している、ということになります。

=MAX(IF(A2:A6="女性",B2:B6))

最大値の例を見てきましたが、MIN関数でも同様にして最小値を求めることが可能です。

3.配列中の最大値をMAX関数で求めよう(VBAのケース)

前章の例のうち、女性のBMIの最大値を取り出す場合のVBAコードを考えてみましょう。

VBAコードの例は以下のようになります。

arrという配列をvariant型で宣言しています。

fmaxbmiはBMIの最大値を入れる変数です。

小数になるので、single型としました。

Redim arr(4,0)というのは、5行1列の配列として再定義をする箇所になります。

配列は0から始まるので、5要素ある場合は4と記述しなければなりません。

For文で2行目から6行目までループさせつつ、1列目、つまりA列の要素が女性である場合のみ、配列に2列目(B列)の値を格納していくようにしました。

最後に、ワークシートファンクションとしてMAX関数を使い、上記で作った配列から最大値を取り出す、というものです。

Sub 配列のmaxとmin()
Dim arr() As Variant
Dim fmaxbmi As Single
Dim i As Long
ReDim arr(4, 0)

For i = 2 To 6
    If Cells(i, 1) = "女性" Then
        arr(i - 2, 0) = Cells(i, 2)
    End If
Next i

fmaxbmi = Application.WorksheetFunction.Max(arr)

MsgBox fmaxbmi

End Sub

メッセージボックスに表示させた結果は以下の通り。

ちゃんと、女性の最大値が得られましたね。

こちらの例でも最大値を取得するケースを見ましたが、MIN関数として最小値を取得することも可能です。

4.まとめ

本記事では、「配列の中から最大値や最小値を探す方法」について解説しましたが、いかがでしたか?

配列はVBAの高速化にも寄与するテクですので、ぜひ使っていきたいですね。