Excelで簡単に複数の範囲からランダムに値を抽出する方法
この記事では、Excelで複数の範囲からランダムに値を抽出するためのユーザー定義関数の作成方法と使い方を解説します。ここでは作成するユーザー定義関数に「RANDOM_SELECT」と名前を付けています。
「RANDOM_SELECT」関数の意義
Excelの標準機能では、単一の範囲からランダムに値を抽出することは可能ですが、複数の範囲からランダムに値を抽出することは直接的にはできません。この「RANDOM_SELECT」関数を使うことで、複数の範囲を指定して簡単にランダムな値を取得することができます。これにより、データのサンプリングやシミュレーションなど、さまざまな場面で役立ちます。
ユーザー定義関数のコード
ユーザー定義関数のコードは以下の通りです。
Function RANDOM_SELECT(ParamArray Ranges() As Variant) As Variant
Dim AllCells As Collection
Dim Cell As Range
Dim Target As Range
Dim rng As Variant
Set AllCells = New Collection
For Each rng In Ranges
If TypeName(rng) = "Range" Then
For Each Cell In rng.Cells
If Not IsEmpty(Cell) Then
AllCells.Add Cell
End If
Next Cell
End If
Next rng
If AllCells.Count > 0 Then
Set Target = AllCells.Item(Application.WorksheetFunction.RandBetween(1, AllCells.Count))
RANDOM_SELECT = Target.Value
Else
RANDOM_SELECT = CVErr(xlErrNA)
End If
End Function
「RANDOM_SELECT」関数の作成方法
この関数を使うためには、まずExcelのVBAエディタでユーザー定義関数を作成する必要があります。VBAエディタを開いて、標準モジュールにコードを貼り付けるだけです。詳細な手順は、過去の記事を参照してください。
「RANDOM_SELECT」関数の使い方
以下に、「RANDOM_SELECT」関数の使用例を示します。次のようなデータがA1:C4の範囲にあると仮定します。
| A | B | C |
| 前菜1 | メイン1 | デザート1 |
| 前菜2 | メイン2 | デザート2 |
| 前菜3 | メイン3 | デザート3 |
| 前菜4 | メイン4 | デザート4 |
このデータを使って、メイン1~4をランダムに表示したいならば、「RANDOM_SELECT」関数を使って次のように入力します。
=RANDOM_SELECT(B2:B5)

また、前菜1~4とデザート1~4をランダムに表示したいならば、「RANDOM_SELECT」関数を使って次のように入力します。
=RANDOM_SELECT(A2:A5,C2:C5)

複数回の抽出を行う場合
もし、複数回の抽出を行いたい場合は、別のセルに同じ関数を入力してください。それぞれのセルで異なる組み合わせが表示されます。
この関数に自動再計算機能:揮発性を持たせる
ユーザー定義関数では自動再計算機能(揮発性)を持ちません。揮発性を持たせるならば以下の記事を参考にしてください。

まとめ
この記事では、Excelで複数の範囲からランダムに値を抽出するユーザー定義関数「RANDOM_SELECT」の作成方法と使い方を解説しました。この関数を活用することで、データのサンプリングやシミュレーションなど、様々な場面で役立ちます。是非お試しください。
コメント