VBAで中央値を求める方法

Excelではワークシート関数のMEDIAN関数を使うと中央値が求められます。

VBAで中央値を求めたい場合はこのMEDIAN関数を使うのが一番簡単です。またほとんどの場合において一番高速です。

ただ、どうしてもVBAの処理で算出したい場合もあるかもしれません。

この2つの中央値を求める方法について紹介します。


中央値の考え方

簡単にですが、中央値の考え方を説明します。

中央値は昇順もしくは降順で並んだ値の中で中央にある値を指します。

並んでいる値の個数が偶数の場合は中央が2つ存在するためその場合はその2つの平均を中央値とします。

(1, 3, 4, 6, 100)という5個の値の場合、中央値は4になります。

(1, 3, 4, 6, 7, 100)という6個の値の場合、中央値は4 + 6の10を半分に割った5になります。

(1, 1, 1, 1, 1, 100)という6個の値の場合、中央値は1 + 1の2を半分に割った1になります。


ワークシート関数のMEDIAN関数を使う方法

ワークシート関数のMEDIAN関数を使う方法です。

引数に値が入った配列を渡します。

引数配列内に数値でない値は内部処理で除去し、数値のみでMEDIAN関数を実行します。

利用方法

実行結果
5


VBAの処理で中央値を算出する方法

ワークシート関数のMEDIAN関数を使わない方法です。

.NET FrameworkのArrayListクラスを利用するために場合によっては参照設定が必要な場合があります。

VBA画面のツールメニュー→参照設定で以下の選択もしくは参照してください。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.tlb(dllではありません)
Microsoft Common Language Runtime Class Library

参照してもチェックが付かない場合がありますが、その場合は参照設定が不要ですので気にせず未設定で構いません。

引数配列から数値のみを抽出しているのは上の関数と同じですが、そのあとで配列のソートをArrayListクラスのSortメソッドで行っています。

この部分はクイックソートなどの他のソート方法でも構いません。

ソートを行っている理由は、ソート後であれば配列の中央が分かるためです。

参考としてコードは紹介しましたが、やはりMEDIAN関数の方をお勧めします。

利用方法

実行結果
5