Excel VBAの「Partition 関数」について解説します。
Partition 関数とは
Excel VBA の Partition 関数は、数値を指定した範囲(レンジ)に分類し、その範囲を文字列で返します。
「点数ごとの人数」や「金額帯の商品数」を把握して分析するなどの際に非常に便利な関数です。
Partition 関数の構文や実際の使い方について、サンプルコード付きでわかりやすく解説していきます。
Partition 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
Partition(number, start, stop, interval)
引数
| 指定項目 | 説明 |
|---|---|
| number | 【必須】判定する数値 |
| start | 【必須】範囲の開始値( 0 以上を指定) |
| stop | 【必須】範囲の終了値(start 以下は指定できない) |
| interval | 【必須】区間の幅( 1 未満にすることはできない) |
戻り値
戻り値は Variant (String)型の文字列です。
例えば、Partition(25, 0, 100, 20) を実行すると、25は「20〜39」の間にあるため、戻り値として ” 20: 39″ という文字列が返ります。最大桁数に揃えるため、スペースが含まれる点に注意が必要です。
| start | stop | interval | 最初より前 | 最初の範囲 | 最後の範囲 | 最後より後 |
|---|---|---|---|---|---|---|
| 0 | 100 | 20 | ” : -1″ | ” 0: 19″ | “100:100” | “101: “ |
| 20 | 199 | 10 | ” : 19″ | ” 20: 29″ | “190:199” | “200: “ |
| 100 | 1010 | 20 | ” : 99″ | ” 100: 119″ | “1000:1010” | “1011: “ |
解説(使用例)
ここからは、サンプルを使って使用例や注意点などについて解説します。
Partition 関数の基本的な使い方
Partition 関数の戻り値を確認する
'■Partition関数サンプル01(戻り値の文字列を確認)
Sub Partition_Sample_01()
Dim str As String
str = Partition(25, 0, 100, 10) '結果: " 20: 29"
Debug.Print str
str = Partition(5, 0, 100, 10) '結果: " 0: 9"
Debug.Print str
str = Partition(105, 0, 100, 10) '結果: "101: "
Debug.Print str & "(最大値超え)"
str = Partition(-5, 0, 100, 10) '結果: " : -1"
Debug.Print str & "(開始値未満)"
End Sub実行結果のイミディエイト画像がこちらです。

評価対象の数値がどの範囲に属するのかを文字列で返しています。
桁数を揃えるために空白文字が入っていることが確認できます。
3番目は、最大値「100」を超える「105」を評価しているため、最大値+1 の「101: 」が返っています。
4番目は、最小値「0」未満のマイナス値「-5」を評価しているため、最小値 – 1 の「 : -1」が返っています。
セル値を取得・区分・ランク付けする実用例
セル入力値(点数)のランク付け集計例
Excelシートのセルから点数を取得・区分・ランク付けして書き込む例です。
ランク毎の人数集計はセルの COUNTIF関数で計算するようにしています。
'■Partition関数サンプル02(セルの点数をランク付け)
Sub Partition_Sample_02()
Dim er As Long 'データ最終行用
Dim i As Long 'ループ用
Dim score As Long '点数用
Dim rStr As String '範囲文字列用
Dim rank As String 'ランク文字列用
Dim wr As Long: wr = 2 '書き込み行初期値
'データの最終行を取得
er = Cells(Rows.Count, "A").End(xlUp).Row
'点数(B列)データをループ処理で取得
For i = 2 To er
score = Cells(i, 2).Value
'範囲名を取得(0点~100点まで、20刻み)
rStr = Partition(score, 0, 100, 20)
'C・D列に結果を出力
Select Case rStr '範囲名をランク名に変換
Case " 0: 19": rank = "Eランク"
Case " 20: 39": rank = "Dランク"
Case " 40: 59": rank = "Cランク"
Case " 60: 79": rank = "Bランク"
Case " 80: 99": rank = "Aランク"
Case "100:100": rank = "Sランク"
Case Else: rank = "----"
End Select
Cells(wr, 3) = rank 'ランク名
Cells(wr, 4) = rStr '範囲文字列
wr = wr + 1
Next i
MsgBox "集計が完了しました!"
End Subコードを実行した結果が次のシート画像のとおりです。
E:F列の表に集計値が入っています。人数の計算式は COUNTIF関数です。

【コード補足】
Partition関数の戻り値の「範囲を示す文字列」を Select Case を使って該当する「ランク名」に引き当てています。
戻り値の「文字列」は最大桁数に合わせるように、空白文字が入っていることを考慮する必要があります。
まとめ
VBA の Partition 関数は、数値を範囲で分類する関数です。「範囲を表す文字列」を返します。
Partition関数のメリット・デメリットは次のとおり。
| メリット | デメリット |
|---|---|
| 簡単に範囲分割できる | 戻り値が文字列で扱いにくい |
| 条件分岐をシンプルにできる | スペースの扱いに注意が必要 |
| データ分析に便利 | 関数の認知度が低い |
【考えられる使いどころ】
- 点数のランク分け
- 年齢帯の分類
- 売上区分の集計
- 商品の価格帯別集計分析
- 数値ログのグルーピング
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;
VBAの関数一覧はこちらからご参照ください。

VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!

