エクセルでルーレットを簡単に作る方法
エクセルでルーレットを作る方法には、大きく分けて関数を使う方法とVBAマクロを活用する方法があります。関数を使う方法は手軽に作成でき、特別な知識がなくても利用できます。一方、VBAを活用すれば、ボタンをクリックするだけでルーレットを回せる仕組みを作ることができ、より視覚的に楽しむことが可能です。
関数を利用してルーレットを作成する方法
エクセルの関数を利用すれば、簡単にランダムに1名を選出するルーレットを作成できます。以下の手順で設定します。
① A列に抽選メンバーを入力
A2セルからA11セルまで、10人分の名前を入力します。
② 乱数を使ってランダムにメンバーを選ぶ
D1セルに以下の関数を入力します。
=RANDBETWEEN(2,11)
この関数は、A2~A11の範囲からランダムな行番号を取得します。
③ INDEX関数で選ばれた行のメンバーを表示
C2セルに以下の関数を入力します。
= INDEX(A:A,D1)
この数式によって、B2セルに表示された行番号のメンバーがC2セルに表示されます。
④ F9キーで抽選を更新
F9キーを押すと、RANDBETWEEN関数が再計算され、C2セルに表示されるメンバーが変わります。
メリット
- 数式のみで作成できるため、VBAを使わなくても簡単にルーレットが作れます。
- F9キーを押すだけで結果を更新できます。
デメリット
- 再計算されるたびに結果が変わるため、意図しない操作で再抽選されてしまうことがあります。確定させるには「値のみ貼り付け」をしたり、エクセルファイルを自動計算しない設定にする必要があります。
詳しくはこちらでご確認ください。 - 乱数が変わるタイミングを制御できないです。
VBA(マクロ)を利用してルーレットを作成する
VBAを利用すると、ボタンを押すだけでランダムにメンバーを選び、結果を固定することができます。
VBAを利用するにはいくつかの初期設定が必要です。
初期設定について確認するにはこちらをご確認ください。
① メンバーリストを用意
A列に抽選対象のメンバーを入力します(関数を利用した方法と同じ)。
② VBAコードを入力
1.VBAエディタを開く
Alt + F11 キーを押して「VBAエディタ」を開きます。
挿入 → 標準モジュール を選択し、新しいモジュールを作成します。
2.以下のVBAコードを入力
Sub ルーレット抽選()
Dim ws As Worksheet
Dim lastRow As Integer
Dim randomIndex As Integer
Dim result As String
' アクティブなシートを取得
Set ws = ActiveSheet
' A列の最終行を取得(A2から下のデータを対象とする)
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
' メンバーが1人以上いるかチェック
If lastRow < 2 Then
MsgBox "抽選対象のメンバーがA2セル以降に入力されていません。", vbExclamation, "エラー"
Exit Sub
End If
' 2行目から最終行までの範囲でランダムに1行を選択
randomIndex = Application.WorksheetFunction.RandBetween(2, lastRow)
' 選ばれたメンバーの名前を取得(エラー回避のためのチェック付き)
result = Trim(ws.Cells(randomIndex, 1).Value)
' 取得した値が空白の場合、再抽選(空白をスキップ)
Do While result = ""
randomIndex = Application.WorksheetFunction.RandBetween(2, lastRow)
result = Trim(ws.Cells(randomIndex, 1).Value)
Loop
' C2セルに当選者を表示
ws.Range("C2").Value = result
' メッセージボックスで当選者を表示
MsgBox "当選者:" & result, vbInformation, "抽選結果"
End Sub
③ ボタンを作成してVBAを実行
1.ボタンを追加
開発 タブを開く(表示されていない場合は「オプション」→「リボンのユーザー設定」から追加)。
挿入 → フォームコントロール → ボタン を選択します。
シート上にボタンを配置し、「マクロの登録」で ルーレット抽選 を選択します。
2.ボタンをクリックすると抽選が実行
ボタンをクリックするたびに、C2セルにランダムで1名の名前が表示されます。
メリット
- ボタンを押すだけで簡単にルーレットを回せます。
- VBAを使うことで、意図しない再計算を防げます。
デメリット
- 初めてVBAを使う場合、開発タブの有効化やマクロの有効化などの設定が必要です。
- Excelのバージョンによっては、マクロを使用できない場合があります。
くじ引きの作り方は?
エクセルを使ったルーレット・くじ引きは、シンプルな関数を使う方法とVBAマクロを活用する方法の2つに分かれます。
rand()関数でランダムな数値を生成
エクセルには「RAND()」という関数があり、0以上1未満の乱数を発生させることができます。これを活用すれば、簡単なくじ引きを作成できます。
A列に参加者の名前を入力すします。
B列に「=RAND()」を入力し、全員に適用します。
C列で「=RANK.EQ(B2, $B$2:$B$10)」を入力し、ランダムな順位を付ける
上位〇名を当選者として選出する
※そのままではわかりづらいため、SORT関数を利用して画面右側に並び替えした一覧を作成しています。
この方法はF9キーを押すだけで新しい結果が得られるため、簡単に何度でも抽選が可能です。ただし、当選結果を確定したい場合は、「値のみ貼り付け」を行うと良いでしょう。
VBA マクロを使ったくじ引きの作成
VBAを使うと、ボタンを押すだけで自動的に抽選を行うことができます。例えば、以下のコードをVBAエディタに入力すれば、リストの中から1人をランダムに選ぶくじ引きを作成できます。
Sub くじ引き抽選()
Dim rng As Range, winner As Range
Set rng = Range("A2:A10")
Set winner = rng.Cells(Int(Rnd() * rng.Rows.Count) + 1, 1)
winner.Interior.Color = RGB(255, 215, 0)
MsgBox winner.Value & "さんが当選しました!", vbInformation, "抽選結果"
End Sub
このマクロをボタンに登録すれば、クリックするだけでくじ引きを行うことができます。
連続で押していくと、当選者の欄に色が変更されていきます。
重複なしで抽選する方法
エクセルで抽選を行う際、同じ人が複数回当選することを防ぐためには「重複なし」の抽選方法を取り入れる必要があります。特に、プレゼント抽選やイベントの当選者選出などでは、一度当選した人が再度選ばれないようにすることが重要です
関数を使った方法
RANK.EQ関数を活用する
最も簡単にできるのは「RANK.EQ関数」と「RAND関数」を組み合わせる方法です。
詳しくは前述のくじ引きを作成する方法をご参考ください。
一度で1位から10位を抽選してしまい、重複を避けるようにします。
演出として、INDEX関数を利用して1位から順番に発表するなどの工夫が考えられます。
SORTBY関数+RANDARRAYを使う(Excel 365 / 2019 以上)
Excel 365 / 2019では、SORTBY関数とRANDARRAY関数を組み合わせて、重複のないランダムな数値を生成できます。
手順
①A列にメンバー名を入力します
②B列に以下の数式を入力します。
=SORTBY(SEQUENCE(10,1,1,1), RANDARRAY(10))
③B列に1~10の重複なしのランダムな数値が並びます。
解説
SORTBY():乱数をもとに順番をシャッフルします。
SEQUENCE(10,1,1,1):1から10までの連番を作成します。
RANDARRAY(10):10個の乱数を生成します。
関数でルーレットを作成する際の注意点
方法さえ分かれば関数でルーレットを作成するのは比較的簡単な方法といえますが、注意することがあります。
それは入力をするたびに順位が再計算・値が変更されてしまうことです。
せっかく抽選をしたのに、値が変更されてしまうと困りますよね。
値が変更されないように以下の2種類の対策が挙げられます。
・最初の抽選後に「値のみ貼り付け」を行う
・抽選用のエクセルファイルを手動で再計算する設定にする
VBAを使った方法
より高度な方法として、VBA(マクロ)を使って重複なしの抽選を行うことも可能です。例えば、以下のようなVBAコードを実行すると、指定した範囲の中から重複なしでランダムな抽選が行えます。
Sub 重複なし抽選name()
Dim i As Integer, n As Integer
Dim numList As Object
Set numList = CreateObject("Scripting.Dictionary")
Dim members As Range
Set members = Range("A2:A11") ' メンバーリストの範囲(A2:A11)
' 1~10の中から重複なしでランダムな数を取得
Do While numList.Count < 5 ' 5名を抽選
n = Application.WorksheetFunction.RandBetween(1, members.Rows.Count)
If Not numList.exists(n) Then
numList.Add n, members.Cells(n, 1).Value ' インデックスを名前に変換
End If
Loop
' 抽選結果を表示
Dim result As String
result = "当選者:" & vbCrLf
For Each Key In numList.keys
result = result & numList(Key) & vbCrLf
Next Key
MsgBox result, vbInformation, "抽選結果"
End Sub
このVBAでは、辞書(Dictionary)を活用し、すでに選ばれた数字がリストに存在しないか確認しながらランダムな数値を追加することで、重複を防ぎます。
抽選 人数 指定してランダムに選ぶ
エクセルで抽選を行う際、特定の人数を指定してランダムに選ぶ方法はいくつかあります。手作業でリストから抽選するのは手間がかかりますが、エクセルの関数やVBAを使えば、効率よくランダムな選出が可能になります。
- RANK.EQ関数を使う方法
まず、ランダムに抽選対象を選ぶ方法として「RAND関数」と「RANK.EQ関数」の組み合わせを活用できます。手順は以下のとおりです。
抽選対象者のリストをエクセルに入力する(A列に名前を入力)。
隣の列(B列)に「=RAND()」を入力してランダムな数値を生成する。
C列に「=RANK.EQ(B2,$B$2:$B$50)」と入力し、順位を決める。
上位n名を抽選結果として採用する(例えば5名を選ぶなら「1~5位」を当選)。
この方法は、特定の人数を指定して公平なランダム抽選ができるのがメリットです。ただし、乱数はエクセルが再計算されるたびに更新されるため、結果を固定したい場合は「値のみ貼り付け」を行いましょう。 - INDEX関数とRANDBETWEEN関数を使う方法
次に、「RANDBETWEEN関数」と「INDEX関数」を組み合わせてランダムな人数を指定する方法です。
=INDEX(A:A,RANDBETWEEN(2,50))
これにより、A列の2行目から50行目までの範囲からランダムに1つの値を取得できます。同じ数式をn個のセルにコピーすれば、ランダムなn人を選出できます。ただし、RANDBETWEEN関数をそのまま使うと、同じ値が重複する可能性があるため、「COUNTIF関数」を併用して重複をチェックする工夫が必要です。 - VBAを使った方法
VBAを使うと、指定した人数分だけランダムに抽選を行い、結果をリストとして表示できます。以下のコードは、リストの中から5名をランダムに選ぶ場合のVBAコードです。 -
Sub 指定人数ランダム抽選()
Dim rng As Range, i As Integer
Dim num As Integer, index As Integer
Dim selected() As String
Set rng = Range("A2:A50") ' 抽選対象リスト
ReDim selected(1 To 5) ' 5名分の配列を用意
For i = 1 To 5
Do
index = Application.WorksheetFunction.RandBetween(1, rng.Rows.Count)
num = rng.Cells(index, 1).Value
Loop While IsEmpty(num) Or (UBound(Filter(selected, num)) >= 0)
selected(i) = num
Next i
MsgBox "当選者:" & Join(selected, vbCrLf), vbInformation, "抽選結果"
End Sub
このVBAコードでは、ループ処理を活用し、すでに選ばれた値を配列で管理することで、重複なしでランダムな5名を選出できます。
抽選No.だけでも良い場合はこちらのコードを利用します。
Sub 重複なし抽選No()
Dim List As Object
Set List = CreateObject("Scripting.Dictionary")
Dim i As Integer, Num As Integer
Do While List.Count < 5 ' 5名分の抽選
Num = Application.WorksheetFunction.RandBetween(1, 10)
If Not List.exists(Num) Then
List.Add Num, Nothing
End If
Loop
Dim result As String
For Each Key In List.keys
result = result & Key & vbCrLf
Next Key
MsgBox "当選者:" & vbCrLf & result, vbInformation, "抽選結果"
End Sub
エクセル ルーレットの応用と便利な使い方
エクセルで作成できるルーレットは、単なる抽選ツールとしてだけでなく、さまざまなシーンで活用できます。業務や日常生活のちょっとした決定を効率化したいときにも便利です。ここでは、エクセルのルーレットを応用する方法と、それによって得られるメリットについて紹介します。
1.座席決めや当番表作成に活用
学校やオフィスでは、定期的に座席の配置を決めたり、掃除当番などの順番を決定したりする場面が多くあります。エクセルのルーレットを活用すれば、これらの作業をスムーズに行うことが可能です。
例えば、名簿をリスト化し、RAND()関数を使ってランダムに並べ替えることで、毎回異なる配置を簡単に作成できます。
また、VBAマクロを組み込むことで、ボタンを押すだけでランダムな結果を生成することもできます。これにより、手作業で並べ替える手間を省くことができ、公平なルールのもとで決定が行えます。
2.商品の割引やキャンペーン抽選
小売店やECサイトでは、エクセルのルーレットを使って割引キャンペーンを実施することも可能です。例えば、一定の購入額に達した顧客に対し、エクセルで作成したルーレットを回して「5%オフ」「10%オフ」「特別クーポン」などをランダムに配布する仕組みを作ることができます。
この方法は、顧客に楽しみながら買い物をしてもらう仕掛けとして有効です。
Excelの条件付き書式やVBAを活用することで、当選内容をリアルタイムで変更できるので、プロモーションの幅も広がります。
3.ゲームのランダム要素として活用
ゲーム開発の現場でも、エクセルのルーレットが役立ちます。
特に、ランダムなアイテムのドロップや敵の出現確率を調整する際に、エクセルでシミュレーションを行うことが多くあります。
RAND関数を使って確率の計算をし、RANK.EQ関数で順位を決めることで、よりリアルな確率シミュレーションが可能になります。
さらに、VBAを使ってボタンを押すたびに異なる結果が得られるようにすれば、試行回数を増やし、ゲームバランスの調整を行うことができます。
4.学習やトレーニングに利用
教育の場面では、クイズの問題をランダムに出題するツールとして活用できます。
例えば、問題リストを作成し、エクセルのルーレットを使って毎回異なる問題を出題するように設定すれば、反復学習の際に効果的です。
また、社員研修や資格試験対策の際に、エクセルのルーレットを使って模擬試験の問題をランダムに抽出することで、実践的なトレーニングが可能になります。
抽選ボタンで簡単に更新する
エクセルでは、F9キーを押すことで数式を再計算し、抽選結果を更新できます。RAND関数を使っている場合、F9を押すたびに新しい乱数が生成され、結果が変わります。
また、VBAを使えば、ボタンをクリックするだけで再計算を行うことも可能です。
Sub 抽選更新()
Application.Calculate
End Sub
このマクロをボタンに登録すれば、ワンクリックで抽選を更新できます。
視覚的に楽しむルーレットの演出
レクリエーション活動としてルーレットを活用する場合もありますよね。ランダムに名前や数字が表示されるようにする演出があるとより盛り上がります。
ここではルーレット感を演出する方法を紹介します。
元データの作成
紹介したルーレットの手順同様・ルーレットメンバーのデータを作成します。
スピンボタンを追加
[開発]タブからスピンボタンを挿入し、特定のセル(例えば乱数を生成するセル)と連動させます。スピンボタンを使って、ボタンを押すと乱数が更新されるようにします。
- [開発]タブを開く
- [開発]タブが表示されていない場合は、Excelのオプションから有効化してください。詳しくはこちら
- [開発]タブ → [挿入] → [フォームコントロール] → [スピンボタン] を選択
- シート上にスピンボタンを配置
- スピンボタンを右クリックし、「コントロールの書式設定」を開く
- 「セルのリンク」に C1 を設定(乱数の基準値)
- 最小値を 1、最大値を 100 に設定
- OKを押して設定を完了
これで、スピンボタンを押すと、C1セルの値が変わります。
仕組みとしては自動再計算の仕組みを利用しています。
- 仕組みとしてはスピンボタンを押す
- ボタンを押している間、連動しているセルC1セルの値が1~100まで自動更新される
- ランダム関数の値も更新され、抽選No.・当選者がランダムに表示される
円グラフ ルーレットで視覚的に楽しむ
エクセルを使ったルーレットの作成方法にはさまざまな手法が視覚的に円グラフを利用した方法で楽しむこともできます。
ここでは円グラフを利用したルーレットの作成方法を紹介します。
元データを作成
まずは、円グラフの元となるデータを作ります。
- A列に選択肢(抽選対象) を入力
- B列に重み(割合) を設定
(すべて「1」にすると均等の確率)
このように均等な割合を設定すると、円グラフは均等に分割されます。もし、特定の選択肢の確率を高くしたい場合は、割合の数値を変更することで調整できます。 - C列に抽選用の乱数(1~100の範囲) を入れる
C1:C6に以下の関数を入力します。
=RANDBETWEEN(1,100) - D列に当選判定を入れる
D2セルに以下の関数を入力し、D3:D6セルまでコピーします。
=IF(C2=MAX($C$2:$C$6), “当選”, “”)
円グラフを挿入
データの準備ができたら、以下の手順で円グラフを作成します。
A列とB列のデータ範囲を選択します。
[挿入]タブから[円グラフ]を選択し、「2D円グラフ」をクリックします。
不要な要素を削除
グラフタイトルや凡例を削除し、見た目をシンプルにします。
グラフをクリックし、選択した状態で+マークを押すと表示させる要素を選択することができます。
データラベルを設定
グラフをクリックし、「データラベルの追加」から選択肢の名前が表示されるように設定します。
データラベル>その他オプションを選択します。
ラベルオプションにて分類名にチェックし、値のチェックを外します。
後は好みでデータラベルの部分が選択された状態で、フォントの大きさなどを調整するとよいでしょう。
当選者のハイライト
当選者の部分の色を目立たせるためにVBAを利用します。
VBAにて以下のマクロを作成します。
Sub ルーレット()
Dim cht As ChartObject
Dim i As Integer
Dim rng As Range
Set cht = ActiveSheet.ChartObjects("グラフ 25") '円グラフの名前を指定
Set rng = Range("D2:D6") ' 当選者が表示されるセル範囲
'再計算
Application.Calculate
' 全員の色をリセット
For i = 1 To rng.Rows.Count
cht.Chart.SeriesCollection(1).Points(i).Format.Fill.ForeColor.RGB = RGB(200, 200, 200) ' 通常の色
Next i
' 当選者の色を変更
For i = 1 To rng.Rows.Count
If rng.Cells(i, 1).Value = "当選" Then
cht.Chart.SeriesCollection(1).Points(i).Format.Fill.ForeColor.RGB = RGB(255, 0, 0) ' 当選者の色を赤に
End If
Next i
End Sub
あとはマクロを実行するためのボタンを設置すれば完了です。
ボタンの設置方法についてはこちらをご確認ください。
ルーレットスタートボタンを押すと、D列に当選と書かれたメンバー部分に赤色、それ以外のメンバーはグレーの色付けがされます。
図で示したように円グラフを利用したルーレットの場合、数値を並べた表よりも、視覚的に分かりやすいことが特徴です。
そのため、子どもや高齢者にも親しみやすい仕様になります。
当番表をエクセルでランダムに決める
エクセルを活用すると、学校や職場の当番表を簡単に作成し、さらにランダムに決めることも可能です。特に、手動で順番を決めると不公平感が生じやすい場合には、エクセルのRAND()関数やRANK.EQ()関数を使うことで、公平かつ自動化された割り当てができます。ここでは、エクセルでランダムな当番表を作成する方法を詳しく解説します。
- 基本的な当番表の作成方法
まず、エクセルに以下のような当番表のデータを作成します。
セルの記載内容の詳細はこちらをご確認ください。
A列(番号) B列(名前) C列(乱数) D列(順位) E列(割り当て)
1 田中 =RAND() =RANK.EQ(C2,$C$2:$C$10,1) 月曜日
2 鈴木 =RAND() =RANK.EQ(C3,$C$2:$C$10,1) 火曜日
3 佐藤 =RAND() =RANK.EQ(C4,$C$2:$C$10,1) 水曜日
※E列はVLOOKUP関数やCHOOSE関数を利用して曜日を表示させます。
この設定では、RAND()関数が0以上1未満のランダムな値を生成し、それをRANK.EQ()関数で順位付けすることで、ランダムな順番を決定できます。
- マクロを使った自動化
手動でF9キーを押してランダムな結果を更新することもできますが、VBAマクロを利用すると、より簡単に更新できます。以下のコードをVBAエディタに入力すれば、ボタンを押すだけで新しい当番表を作成できます.
Sub 当番表更新() Application.Calculate End Sub
このコードを「マクロの記録」機能を使ってボタンに割り当てることで、毎回手動でF9キーを押さなくても、ボタン一つで当番表を更新できるようになります。 - 当番表を公平に運用するコツ
エクセルでランダムに当番を決める際には、以下のような工夫をすると、より公平な運用が可能になります。
- 前回のデータと比較し、同じ人が連続しないようにする
IF関数を使い、前回と同じ名前が連続しないように制御できます。 - 欠席者や休暇の考慮
別の列に「勤務状況」を入力し、IF関数で条件分岐することで、当番にならない人を除外できます。
まとめ
エクセルを使えば、手軽にランダムな当番表を作成することができます。RAND()関数とRANK.EQ()関数を組み合わせることで、公平な割り当てが可能になり、VBAマクロを活用すれば、ワンクリックで更新できる便利な仕組みを作ることができます。職場や学校での当番決めに活用し、手作業の負担を減らしましょう。
excel ランダム 順番決めの活用例
ルーレット機能を業務で活用するコツ
エクセルのランダム順番決めは、以下のような場面で活用できます。
- 学校や職場での席順決め
- プレゼンや発表の順番決定
- 作業担当の割り当て
- チーム分け
これらの場面では、RAND()関数やRANK.EQ関数を組み合わせることで、公平かつ迅速に順番を決めることができます。
エクセルを活用することで、手作業の手間を省きながら、よりスムーズな運営が可能になります。