Excel VBAマクロで組み合わせを自動生成する方法
この記事では、ExcelのVBAマクロを使用して異なる要素の組み合わせを自動生成する方法を詳しく説明します。このマクロは、特定の要素群から指定した数だけ要素を選んで全ての組み合わせをリスト化するためのものです。例えば、製品の異なる特性の組み合わせを全てリストアップしたい場合や、チームメンバーの異なる役割の組み合わせを全て出力したい場合などに役立ちます。
なお、Excelではなくブラウザから組み合わせを生成する場合には下部の参考ページをご覧ください。
COMBIN関数を使用して組み合わせの数を事前に確認する
Excelには、ある範囲のアイテムから特定の数のアイテムを選ぶ組み合わせの総数を事前に計算するための関数があります。それが「COMBIN」関数です。この関数は2つの引数を受け取ります:組み合わせを取る対象の全体の数(n)と、一度に選択するアイテムの数(r)です。
COMBIN関数の使用方法は以下のとおりです。
- まず、空のセルを選択します。これが結果の出力先になります。
- 次に、そのセルに「=COMBIN(n, r)」と入力します。ここで、nは全体の数で、rは一度に選択するアイテムの数です。
- 最後に、Enterキーを押して結果を確認します。
例えば、
=COMBIN(7, 4)
と入力すると、7個のアイテムから4つを選ぶ全ての組み合わせの数が計算されます。これにより、生成される組み合わせの数が大量になりすぎるかどうかを事前に確認できます(35個)。
これは特に、大きな範囲から多くのアイテムを選ぶ組み合わせを生成する場合に役立ちます。COMBIN関数を使用すれば、組み合わせの数が想定外に多くなることによるパフォーマンスの問題を避けられます。
マクロのコードとその説明
組み合わせの数が想定外に多くないことを確認したら、実際に組み合わせリストを作成してみましょう。
以下にマクロのコードを示します。{Alt}+{F11}などでVBEを起動し、「挿入」→「標準モジュール」へ貼り付けてください。設定後はVBEは閉じ、{Alt}+{F8}などでマクロ「Combinations
」を実行してください。
Option Explicit
Sub Combinations()
Dim rng As Range
Dim outCell As Range
Dim arr() As Variant
Dim r As Long
Dim n As Long
Dim i As Long
Dim cmb As Variant
' アイテム範囲を指定
Set rng = Application.InputBox("アイテム範囲を選択してください", Type:=8)
arr = rng.Value
n = rng.Cells.Count
' 取り出す数を指定
r = Application.InputBox("取り出す数を入力してください", Type:=1)
' 出力先の開始セルを指定
Set outCell = Application.InputBox("出力先の開始セルを指定してください", Type:=8)
' 組み合わせを計算し、出力
For Each cmb In CombinationsArray(arr, r)
outCell.Resize(, r).Value = cmb
Set outCell = outCell.Offset(1, 0)
Next cmb
End Sub
Function CombinationsArray(arr() As Variant, r As Long) As Collection
Dim cmb As New Collection
CombinationsArrayRecur cmb, arr, "", r, LBound(arr)
Set CombinationsArray = cmb
End Function
Sub CombinationsArrayRecur(cmb As Collection, arr() As Variant, prefix As String, r As Long, start As Long)
Dim i As Long
For i = start To UBound(arr)
If r = 1 Then
cmb.Add Split(IIf(prefix <> "", prefix & " ", "") & arr(i, 1))
Else
CombinationsArrayRecur cmb, arr, IIf(prefix <> "", prefix & " ", "") & arr(i, 1), r - 1, i + 1
End If
Next i
End Sub
このマクロは次の手順で機能します。事前にどこかへアイテムリストを作成しておきましょう。下の例ではセルI2:I11にリストを作成しています。ただし使用するのはI2:I8の7種類だけのつもりです。
- まず、ユーザーにアイテムの範囲を選択させます。
- 次に、取り出すアイテムの数を指定させます。
- その後、結果を出力するセルの位置を選択させます。
- 選択した範囲から指定した数だけのアイテムを取り出す全ての組み合わせをCPUが計算し、指定したセルに出力してくれます。
まとめ
以上がExcelのVBAマクロを使用して組み合わせを自動生成する方法です。マクロは、ユーザーがアイテムの範囲、取り出すアイテムの数、結果を出力するセルの位置を簡単に指定できるようになっています。このマクロは、異なる要素の組み合わせを全てリスト化したい場合や、ある範囲から特定の数の要素を選んで全ての可能な組み合わせを見つけ出したい場合に非常に便利です。
参考:同等の処理をブラウザから行うツール
以下のページでは組み合わせリストの生成をブラウザから実行可能です。
コメント