Max・Min・Averageワークシート関数で最大値・最小値・平均を求める

vbamaxminaveeyecatch

エクセルVBAで、ワークシート関数 Max・Min・Averageを利用して最大値・最小値・平均を求めます。
「簡単で短いエクセルVBAコード組み立て」を目指す上では、ワークシート関数は強い味方です。

 

こんにちは、じゅんぱ店長(@junpa33)です。

 

今回のテーマは、エクセルワークシート関数 「Max」・「Min」・「Average」についてです。

「Max関数」・「Min関数」・「Average関数」は、指定のデータ範囲の中で、

最大値、最小値、平均値を求めることが出来ます。

エクセルシートでは、皆さんお馴染みの関数です。

 

「Max関数」「Min関数」「Average関数」とはどんな関数

 

エクセルVBAの中には、VBA関数、メソッドやプロパティを含めても、

Max・Min・Averageという関数はありません。

これは、エクセルの中でもワークシートに付随した関数になります。

ですので、いきなりVBAコードでMaxと記述してもVBAでは「何ですかそれ?」というエラーが返ってきます。

 

Max関数・Min関数・Average関数などのワークシート関数をエクセルVBAで使いたいときは、

ちゃんと決まった、利用するための流儀があります。

「Application.WorksheetFunctionプロパティ」というものを使って「使いますよ!宣言」を行う必要があります。

このようなワークシート関数は、他にもたくさんあり、

有名どころですと、Vlookup関数、Sum関数、Match関数などなど

非常に多くのワークシート関数を使うことが出来ます。

 

Max関数の構文

 

Max関数の構文

  • WorksheetFunction . Max ( 範囲1 [ , 範囲2・・])

 

「WorksheetFunction . 」は関数の前に必ずつけます。(接頭語のようなものです。)

「範囲」は「 , 」(カンマ)でで区切って複数設定できます。

「範囲」として、セルでの範囲だけでなく、配列の要素群を範囲として指定することもできます。

 

Min関数の構文

 

Max関数の構文

  • WorksheetFunction . Min ( 範囲1 [ , 範囲2・・])

 

「WorksheetFunction . 」は関数の前に必ずつけます。(接頭語のようなものです。)

「範囲」は「 , 」(カンマ)でで区切って複数設定できます。

「範囲」として、セルでの範囲だけでなく、配列の要素群を範囲として指定することもできます。

 

Average関数の構文

 

Max関数の構文

  • WorksheetFunction . Average ( 範囲1 [ , 範囲2・・])

 

「WorksheetFunction . 」は関数の前に必ずつけます。(接頭語のようなものです。)

「範囲」は「 , 」(カンマ)でで区切って複数設定できます。

「範囲」として、セルでの範囲だけでなく、配列の要素群を範囲として指定することもできます。

 

「Max関数」「Min関数」「Average関数」の使い方

 

非常に簡単に使える関数ですが、使い方をサンプルで説明していきます。

 

「Max関数」「Min関数」「Average関数」の使い方

 

この3つの関数のサンプル説明として、分かり易いように同じ前提の例題とします。

エクセルシートA列に45個のIDを作り、Rnd関数で3桁までの数値をランダムに割り当てていきます。

  • 「Max関数」を使って、45個の中で最大の値を探して別セルに表示します。
  • 「Min関数」を使って、45個の中で最小の値を探して別セルに表示します。
  • 「Average関数」を使って、45個の平均値を計算して別セルに表示します。

 

実務上の多くは、実際に「Max関数」「Min関数」で最大値、最小値を取り出しても、

それが「どこのID番号や行番号のものなのか?」を知ることは出来ません。

 

「さて、それをどのようにして知るか?」

このサンプルでは、その答えの一つを提示しました。

ここでは、Match関数を使って対策しています。

 

Max関数サンプル

 

設定する変数
今回使用する変数です。

  • i ・・・・ ループカウント変数(ID番号を追いかける)
  • r ・・・・ 求める値(最大値)がある相対的行番号(ID番号)
コード

Sub Max関数サンプル()

    Dim i As Long, r As Long
    '項目を表示します
        Range("A2") = "ID"
        Range("B2") = "値"
        Range("D2") = "最大値"
        Range("E2") = "最大値ID"
    '45個分乱数で数値を作ります
        For i = 1 To 45
            Range("A" & 2 + i) = i
            Range("B" & 2 + i) = WorksheetFunction.Round(Rnd * 1000, 0)
        Next i
    'Max関数で最大値を調べます
        Range("D3") = WorksheetFunction.Max(Range("B3:B47"))
    'Match関数で最大値があるIDを調べます
        On Error Resume Next
        r = WorksheetFunction.Match(Range("D3"), Range("B3:B47"), 0)
        Range("E3") = r

End Sub

実行結果

最大値は「997」 最大値IDは「19」と表示されました。

vbamaxminave001a

 

MEMO

ここのコードで使用している関数

Round関数 ・・・・ 数値の切り捨て、切り上げ、四捨五入を行う

エクセルVBA 数値を四捨五入したい時のRound関数の使い方と注意点

エクセルVBA 数値の切り上げ、切り捨てに要注意「RoundUpとRoundDown関数」

Rnd関数 ・・・・ 乱数を発生させる

エクセルVBA Rnd関数で乱数を取得。簡単な加工コードで発生値を変化させる

Match関数 ・・・・ 指定された値が検索対象範囲に存在するかを調べ、存在すればその位置を表示する

エクセルVBAで使うMatch関数 活用度アップでテッパン関数に!

 

Min関数サンプル

 

設定する変数
今回使用する変数です。

  • i ・・・・ ループカウント変数(ID番号を追いかける)
  • r ・・・・ 求める値(最小値)がある相対的行番号(ID番号)
コード

Sub Min関数サンプル()

    Dim i As Long, r As Long
    '項目を表示します
        Range("A2") = "ID"
        Range("B2") = "値"
        Range("D2") = "最小値"
        Range("E2") = "最小値ID"
    '45個分乱数で数値を作ります
        For i = 1 To 45
            Range("A" & 2 + i) = i
            Range("B" & 2 + i) = WorksheetFunction.Round(Rnd * 1000, 0)
        Next i
    'Min関数で最小値を調べます
        Range("D3") = WorksheetFunction.Min(Range("B3:B47"))
    'Match関数で最小値があるIDを調べます
        On Error Resume Next
        r = WorksheetFunction.Match(Range("D3"), Range("B3:B47"), 0)
        Range("E3") = r

End Sub

実行結果

最小値は「16」 最小値IDは「32」と表示されました。

vbamaxminave002a

 

MEMO

ここのコードで使用している関数

Round関数 ・・・・ 数値の切り捨て、切り上げ、四捨五入を行う

エクセルVBA 数値を四捨五入したい時のRound関数の使い方と注意点

エクセルVBA 数値の切り上げ、切り捨てに要注意「RoundUpとRoundDown関数」

Rnd関数 ・・・・ 乱数を発生させる

エクセルVBA Rnd関数で乱数を取得。簡単な加工コードで発生値を変化させる

Match関数 ・・・・ 指定された値が検索対象範囲に存在するかを調べ、存在すればその位置を表示する

エクセルVBAで使うMatch関数 活用度アップでテッパン関数に!

 

Average関数サンプル

 

設定する変数
今回使用する変数です。

  • i ・・・・ ループカウント変数(ID番号を追いかける)
コード

Sub Average関数サンプル()

    Dim i As Long
    '項目を表示します
        Range("A2") = "ID"
        Range("B2") = "値"
        Range("D2") = "平均値"
        Range("E2") = ""
    '45個分乱数で数値を作ります
        For i = 1 To 45
            Range("A" & 2 + i) = i
            Range("B" & 2 + i) = WorksheetFunction.Round(Rnd * 1000, 0)
        Next i
    'Average関数で平均値を調べます
        Range("D3") = WorksheetFunction.Average(Range("B3:B47"))

End Sub

実行結果

平均値は「531.1333」と表示されました。

vbamaxminave003a

 

MEMO

ここのコードで使用している関数

Round関数 ・・・・ 数値の切り捨て、切り上げ、四捨五入を行う

エクセルVBA 数値を四捨五入したい時のRound関数の使い方と注意点

エクセルVBA 数値の切り上げ、切り捨てに要注意「RoundUpとRoundDown関数」

Rnd関数 ・・・・ 乱数を発生させる

エクセルVBA Rnd関数で乱数を取得。簡単な加工コードで発生値を変化させる

 

最大値と最小値を同時に出せる別のコード組み立て

 

実務的には、Max関数もMin関数を使う場合でも、

他の関数にもお世話にならないと「事が済まない(目的が達成されない)」と感じられたことがあるでしょう。

例えば、「検索系関数が必要なんだけど・・・」

そこで、全く発想の違う考え方で、

最大値と最小値を同時に、しかもID番号まで即判明する方法を紹介します。

と言っても、
For~Next で、「一個ずつ大小比べて行く」ような
思考停止の話ではありません。

 

いろんな解決法の一つとして参考にしてください。個人のアイデアの出し所です。

 

Sortメソッドサンプル

エクセルのソート機能を利用してデータ群を昇順や降順に並べ替えします。

この方法で、最上段または最下段のデータを拾えば、そのものが最大値や最小値となっています。

設定する変数
今回使用する変数です。

  • i ・・・・ ループカウント変数(ID番号を追いかける)
コード

Sub sort関数()

    Dim i As Long
    '項目を表示します
        Range("A2") = "ID"
        Range("B2") = "値"
        Range("D2") = "最大値"
        Range("E2") = "最大値ID"
        Range("D4") = "最小値"
        Range("E4") = "最小値ID"
    '45個分乱数で数値を作ります
        For i = 1 To 45
            Range("A" & 2 + i) = i
            Range("B" & 2 + i) = WorksheetFunction.Round(Rnd * 1000, 0)
        Next i
    'データ範囲A2からB47を降順並び替えをします
        Range("A3:B47").Sort key1:=Range("B3"), order1:=xlDescending
    '最大値
        Range("D3") = Range("B3")
        Range("E3") = Range("A3")
    '最小値
        Range("D5") = Range("B47")
        Range("E5") = Range("A47")

    'データ範囲A2からB47を降順並び替えをします 表の体裁を元に戻す
        Range("A3:B47").Sort key1:=Range("A3"), order1:=xlAscending

End Sub

実行結果

キーを「B3」にした並び替えの時に、最上段(この場合は最大値)・最下段(この場合は最小値)としてデータを取り込みます。

最大値は「984」 最大値IDは「11」、最小値は「75」 最小値IDは「18」と表示されました。

vbamaxminave004a

 

データ取得後にID番号で再整列させて表を整えます。これだけです。

vbamaxminave005a

 

MEMO

ここのコードで使用しているメソッド

Sortメソッド ・・・・ 数値データなどのデータ群を順番に並び替える

 

エクセルワークシート関数 Max・Min・Averageを
VBAで使う まとめ

 

エクセルVBAで、最大値、最小値、平均値を調べるコードを組み立てる場合は、

ご覧いただいたように、ワークシート関数を拝借利用するのが、一番簡単です。

 

エクセルVBAのいろんなコード解説の中には、難解なコードやコード進行がややこしい組み立て方なども多くあります。

「やるならこれぐらいは知っていて・・・」なのかもしれませんが、

自分的には、VBAコード組み立てのポリシーは「平易で簡単なコード設計」を目指していきたいと思っています。

ワークシート関数は、そういった意味でもお助けマンになってくれる存在です。

 

エクセルワークシート関数を学ぶために

 

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

実務では、同じ結果を生み出す方法でも、「より簡単に出来る」方法を知っていることが肝要です。

自分たちは研究者でも講師でもありませんので、

その同じ結果を出すために「より難しい方法」なんて全く必要ありません。

むしろ、初級・中級のスキルを持っていれば十分の知識になっていると思います。

 

基礎知識固めのための再入門としてもこの記事は参考にしていただけると思います。

 

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習で良質な参考書を7冊選ぶ。良書との出会いは大切です

 

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできると思います。
エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

 

「VBA最速理解」の記事一覧を開く

 

今回の記事はここまでです。   最後までご覧いただき有難うございました。

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。