範囲内からひとつだけの値をランダムに取り出すユーザー定義関数

Excelで複数範囲から一様分布型でランダムな値を取得:ユーザー定義関数

今回は、ExcelのVBAを使用して、複数のセル範囲からランダムに値を選択するユーザー定義関数を作成する方法をご紹介します。素早く、そして効率的にランダムな選択を行いたい時に、このユーザー定義関数は非常に便利です。

関数の主な特徴

作成する関数は、指定した複数のセル範囲からランダムに1つのセルを選択し、その値を返すものです。範囲内のセルには文字列や数字、空白など任意の内容が含まれていても構いません。

  • 複数のセル範囲を引数として受け取ります。
  • 範囲内のセルからランダムに1つを選択します。
  • 選択されたセルの値を出力します。
  • この関数は一様分布型で、各アイテムの出現の確率は同じです。

関数コードの登録方法

以下のステップで関数コードをExcelに登録しましょう。

  1. Excelを開き、「開発」タブをクリックします。
  2. 「Visual Basic」ボタンをクリックし、VBAエディタを開きます。
  3. VBAエディタで「挿入」>「標準モジュール」を選択し、新しいモジュールを作成します。
  4. 下記のコードを新しいモジュールにコピー&ペーストします。
  5. VBAエディタは閉じます。
Function RandomFromRanges(ParamArray ranges() As Variant) As Variant
    Dim cell As Range
    Dim collection As New Collection
    Dim i As Integer, selected As Integer
    
    ' 全ての範囲から値をコレクションに追加
    For i = LBound(ranges) To UBound(ranges)
        If TypeName(ranges(i)) = "Range" Then
            For Each cell In ranges(i)
                collection.Add cell.Text ' 空白も追加
            Next cell
        End If
    Next i
    
    ' ランダムに1つの値を選択して返す
    If collection.Count > 0 Then
        Randomize
        selected = Int((collection.Count * Rnd) + 1)
        RandomFromRanges = collection(selected)
    Else
        RandomFromRanges = "" ' 空白文字列を返す
    End If
End Function

関数の使用方法

コードを登録したら、Excelシート上で関数を使用できるようになります。

例として、「=RandomFromRanges(A1:A5, B1:B3, C4:C6)」の形で関数をセルに入力します。この例では、範囲A1:A5、B1:B3、C4:C6からランダムに1つの値を選択し、関数を実行したセルにその値を表示します。

また、「関数の挿入」ボタンから「ユーザー定義」グループにも登録されているので、こちらを使用することも可能です。

選択した範囲の中からランダムに取出しがなされます。

コピーする場合には引数で指定した範囲を絶対参照しておくとよいでしょう。

参考資料

リスト用に登録すると便利なアイテム

Excel:ユーザー設定リスト用に登録すると便利なアイテム
Excelの「ユーザー設定リスト」に登録しておくと便利なリストをまとめました。 コピーペーストしてお使いください。

使用上の注意点

関数を実行すると、指定した範囲からランダムに選ばれたセルの値が、関数を入力したセルに表示されます。選ばれるセルは完全にランダムなので、同じ範囲を指定しても、毎回異なる値が出力される可能性があります。

  • 使用する前に、マクロが有効になっていることを確認してください。
  • 非常に大きな範囲を指定した場合、関数の実行が遅くなる可能性があります。
  • 関数を実行するたびにランダムな値が選ばれるため、同じ結果を再現することはできません。

離散分布型のランダム値選択のユーザー定義関数も用意いたしました。詳細は下記のページを参考にしてください。

離散確率分布型でランダムに値を表示するユーザー定義関数
Excelでユーザー定義関数を用いて離散確率分布からランダムに値を取得する方法 データ分析やシミュレーションをExcelで行う際、特定の確率分布に基づいてランダムな値を生成したいというニーズはよくあります。今回は、特定の範囲と出現比率に基づ...

 

コメント