VBA Partition関数 数値を範囲で分類し文字列で返す

VBA Partition関数 数値を範囲で分類し文字列で返す

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″ という文字列が返ります。最大桁数に揃えるため、スペースが含まれる点に注意が必要です。

startstopinterval最初より前最初の範囲最後の範囲最後より後
010020” : -1″” 0: 19″“100:100”“101: “
2019910” : 19″” 20: 29″“190:199”“200: “
100101020” : 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

実行結果のイミディエイト画像がこちらです。

Partition関数サンプル01実行結果のイミディエイト

評価対象の数値がどの範囲に属するのかを文字列で返しています。

桁数を揃えるために空白文字が入っていることが確認できます。

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関数サンプル02実行結果のシート画像

【コード補足】

Partition関数の戻り値の「範囲を示す文字列」を Select Case を使って該当する「ランク名」に引き当てています。

戻り値の「文字列」は最大桁数に合わせるように、空白文字が入っていることを考慮する必要があります。

まとめ

おわりに

VBA の Partition 関数は、数値を範囲で分類する関数です。「範囲を表す文字列」を返します。

Partition関数のメリット・デメリットは次のとおり。

メリットデメリット
簡単に範囲分割できる戻り値が文字列で扱いにくい
条件分岐をシンプルにできるスペースの扱いに注意が必要
データ分析に便利関数の認知度が低い

【考えられる使いどころ】

  • 点数のランク分け
  • 年齢帯の分類
  • 売上区分の集計
  • 商品の価格帯別集計分析
  • 数値ログのグルーピング

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらからご参照ください。

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!

よかったらシェアしてね!
  • URLをコピーしました!
目次