Excelで乱数を使いたい場面は意外と多くあります。
たとえば「抽選番号を作りたい」「席順をランダムに決めたい」「テストデータをランダム生成したい」などです。
しかし、単に「ランダムな数字を作る」だけなら簡単でも、
「重複しない数字」を作るとなると、少し工夫が必要になります。
この記事では、Excelの関数だけで「重複しないランダム数字」を生成する方法を、
初心者にもわかりやすく手順付きで解説します。
RAND関数・RANDBETWEEN関数・SORTBY関数などを使った最新の実務向けテクニックも紹介します。
目次
- ✅ Excelでランダムな数字を作る基本関数
- ・RAND関数:0以上1未満の小数を返す
- ・RANDBETWEEN関数:指定した範囲の整数を返す
- ✅ 重複しないランダム数字を作る考え方
- ✅ 方法① RAND関数で並べ替えて重複なしのランダム順を作る
- ・手順
- ・例:SORTBY関数を使って一瞬で実現(Excel 365以降)
- ✅ 方法② RANDBETWEEN関数+COUNTIF関数で重複チェック
- ・手順例
- ・応用:配列数式で自動生成(旧Excel向け)
- ✅ 方法③ UNIQUE・SORTBY・SEQUENCE関数を組み合わせる(Excel 365)
- ✅ 方法④ VBAを使って重複しない乱数を作る(応用編)
- ✅ 実務での活用例
- ・抽選・くじ引き
- ・席順やグループ分け
- ・テストデータの生成
- ✅ 注意点とコツ
- ・再計算で値が変わる
- ・RANDARRAYはExcel 365以降のみ
- ・大量データでは計算負荷に注意
- ✅ まとめ:Excelで重複しないランダム数字を自在に作ろう
✅ Excelでランダムな数字を作る基本関数
まずは、Excelでランダムな数値を作成するための基本的な関数を確認しましょう。
・RAND関数:0以上1未満の小数を返す
構文:
=RAND()
RAND関数は、0以上1未満のランダムな小数(例:0.12345…)を生成します。
再計算のたびに値が変わるため、動的なランダム化が可能です。
ただし、整数を作りたい場合はこのままでは使いづらいので、掛け算や四捨五入を組み合わせます。
・RANDBETWEEN関数:指定した範囲の整数を返す
構文:
=RANDBETWEEN(最小値, 最大値)
例:=RANDBETWEEN(1,100)
→ 1~100の範囲でランダムな整数を返します。
この関数を使えば、たとえば「1~50までの乱数リスト」を一瞬で作ることができます。
しかし、同じ数が重複して出る可能性があるのが欠点です。
参考:【Excel】適当な数値(乱数)をランダムに入力する方法
✅ 重複しないランダム数字を作る考え方
Excelで「重複しない乱数リスト」を作る場合、主に2つの方法があります。
- RAND関数を使って並べ替える方法
- RANDBETWEEN関数とCOUNTIF関数を組み合わせる方法
さらに、Excel 365以降では SORTBY関数やSEQUENCE関数 を活用すると、
わずか1行の関数で実現できる便利な方法もあります。
それぞれ順に見ていきましょう。
✅ 方法① RAND関数で並べ替えて重複なしのランダム順を作る
一番シンプルで確実な方法です。
まず、対象となる数字を順番に並べ、それをRAND関数でシャッフルします。
・手順
- A列に1~10までの数字を入力(または連番で作成)
- B列に次の式を入力
=RAND() - C列でRANDを基準に並べ替える
- データタブ → 並べ替え → 「B列(RAND列)」を昇順または降順
こうすることで、「1~10」の数字が重複なしでランダムな順序に並びます。
・例:SORTBY関数を使って一瞬で実現(Excel 365以降)
新しいExcel(Microsoft 365やExcel 2021)では、さらに簡単にできます。
=SORTBY(SEQUENCE(10,1,1,1),RANDARRAY(10))
この式は、
SEQUENCE(10,1,1,1)→ 1~10の連番を作成RANDARRAY(10)→ 10個のランダムな数値を生成SORTBY→ 乱数を基準に並び替え
結果として、重複しないランダム順リストが自動生成されます。
この方法はスピーディで、再計算すれば毎回違う並びになります。
✅ 方法② RANDBETWEEN関数+COUNTIF関数で重複チェック
RAND関数での並べ替えが使えない場合は、RANDBETWEENとCOUNTIFで「重複を除外」できます。
・手順例
- A2セルに次の式を入力します:
=RANDBETWEEN(1,10) - B2セルに次を入力して「重複チェック」します:
=COUNTIF($A$2:A2, A2) - B2の値が「1」ならOK、「2以上」なら重複なので再計算(F9キー)
この方法は、再計算を繰り返してすべての値がユニークになるまで調整します。
完全自動ではありませんが、Excelの古いバージョンでも使える安定した方法です。
参考:【Excel】特定の文字列を条件にするVLOOKUPの使い方とは?IFやCOUNTIFと組み合わせて柔軟なデータ取得を実現する方法
・応用:配列数式で自動生成(旧Excel向け)
次の数式を入力し、Ctrl+Shift+Enterで確定します。
=IFERROR(SMALL(IF(COUNTIF($A$1:A1,ROW($1:$10))=0,ROW($1:$10)),RANDBETWEEN(1,10-ROW(A1)+1)),"")
この数式は、1~10の中から重複しないランダム数を1つずつ生成します。
古いExcel(2016以前)で動的配列が使えない場合に有効です。
✅ 方法③ UNIQUE・SORTBY・SEQUENCE関数を組み合わせる(Excel 365)
最新のExcelでは、わずか1つの関数で「重複なしの乱数リスト」が作れます。
=SORTBY(SEQUENCE(20,1,1,1),RANDARRAY(20))
この式の動作を分解すると:
SEQUENCE(20,1,1,1)→ 1から20までの連番を作成RANDARRAY(20)→ 20個の乱数を生成SORTBY→ 乱数順に並べ替え(重複なし)
この方法は、RANDARRAYが自動で一意の値を生成しないため、
「連番+ランダム順」という仕組みで“重複なし”を保証しています。
一度入力するだけでランダムに並んだ1~20の数字が得られ、非常に便利です。
参考:【Excel】降順にできないときの原因と解決方法|数値・日付・文字列の正しい並べ替え方
✅ 方法④ VBAを使って重複しない乱数を作る(応用編)
関数だけでなく、VBA(マクロ)を使えばさらに柔軟に制御できます。
例えば「1~100の範囲から重複なしで10個の乱数を生成」するコードは以下の通りです。
Sub UniqueRandomNumbers()
Dim i As Long, n As Long
Dim result() As Long
Dim temp As Long
Dim exists As Boolean
n = 10 '生成する乱数の個数
ReDim result(1 To n)
For i = 1 To n
Do
temp = Int((100 - 1 + 1) * Rnd + 1)
exists = False
For j = 1 To i - 1
If result(j) = temp Then
exists = True
Exit For
End If
Next j
Loop While exists
result(i) = temp
Next i
For i = 1 To n
Cells(i, 1).Value = result(i)
Next i
End Sub
このVBAを実行すると、A列に「重複しない乱数」が10個生成されます。
RANDやRANDBETWEEN関数より高速で、範囲や件数の制御も簡単です。
参考:【VBA】特定の文字を含む列の処理:検索・削除・別シートにコピー
✅ 実務での活用例
重複しないランダム数字は、業務や学習のさまざまな場面で活用できます。
・抽選・くじ引き
「社員番号の中から当選者をランダムに選ぶ」ときに使えます。
RAND関数やSORTBYで並べ替えれば、ランダム順に抽出が可能です。
・席順やグループ分け
生徒・社員を公平に並べ替える際、重複なし乱数を使って簡単に並び替えできます。
・テストデータの生成
商品コードやIDをテスト用にランダム生成し、重複を防ぎたいときに便利です。
✅ 注意点とコツ
・再計算で値が変わる
RAND関数・RANDBETWEEN関数は再計算のたびに値が変わります。
結果を固定したい場合は、値をコピーして「値貼り付け」で固定しましょう。
- 範囲を選択 → Ctrl+C
- 右クリック → 「値のみ貼り付け」
・RANDARRAYはExcel 365以降のみ
RANDARRAY や SORTBY 関数はExcel 2019以前では使用できません。
古いバージョンではRAND+並べ替えの方法を使うのが確実です。
・大量データでは計算負荷に注意
RAND関数は揮発性関数のため、Excelの再計算が重くなる場合があります。
数千件以上の乱数を作る場合は、VBAでの生成がおすすめです。
✅ まとめ:Excelで重複しないランダム数字を自在に作ろう
- RAND関数やRANDBETWEEN関数でランダムな数値を生成できる
- RAND+並べ替えで「重複なしランダム順」が簡単に作れる
- Excel 365では
SORTBY(SEQUENCE(),RANDARRAY())が最も効率的 - COUNTIFやVBAを使えば、古いバージョンでも対応可能
- 再計算で変わる点に注意し、固定したいときは「値貼り付け」を活用
Excelでは関数を少し組み合わせるだけで、ユニークな乱数リストを完全自動で生成できます。
抽選・順番決め・データサンプル作成など、さまざまな場面でこのテクニックを活用してみてください。