🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel で行をランダムに選ぶ・抽出する・シャッフルする方法

|

Excel で行をランダムに選ぶ・抽出する・シャッフルする方法

TL;DR — Excel のあらゆるランダム抽出は、まったく同じ技です。各行にランダムな数を 付け、その数で並べ替える。 上から取ればランダムな標本、全体を並べ替えればシャッフルに なります。Excel 365 なら数式 1 本 — =TAKE(SORTBY(data, RANDARRAY(ROWS(data))), n)n 行を 重複なし で選びます。 標本が有効かどうかを決める唯一の区別が、非復元抽出(ランダムキーで並べ替え — どの抽選 も別々)と 復元抽出INDEX + RANDBETWEEN — 抽選が繰り返し得る)です。そして生きた RAND() で並べ替えるなら、先に値へ固定 しないと、並べ替えの最中に振り直されます。

' 最新(Excel 365)— 重複なしで 10 行をランダムに選ぶ:
=TAKE(SORTBY(A2:C500, RANDARRAY(ROWS(A2:C500))), 10)

' リスト全体をランダムな順序にシャッフル:
=SORTBY(A2:A100, RANDARRAY(ROWS(A2:A100)))

' 古典(どのバージョンでも)— 補助列を作り、それで並べ替える:
' B2:  =RAND()      次に コピー → 値貼り付け → B 列で並べ替え → 上位 N 件を取る

「行をいくつかランダムに選ぶ」は簡単そうですし、数式もほぼ簡単です。正しい ランダム標本 と、それらしく見える 間違った 標本を分けるのは、ほとんどの人が自分で選んでいると気づか ない 1 つの選択 — 同じ行が 2 回選ばれ得るかどうか — です。そこさえ外さなければ、仕組み自体 はやさしいものです。

この記事で学べること

  • 普遍のパターン:ランダムキー → 並べ替え → 取る(すべてはこの変奏)
  • SORTBY + RANDARRAY による最新の 1 行 と、RAND を使った 古典 の補助列
  • 標本を台無しにする区別:非復元抽出 vs 復元抽出
  • 生きた RAND() の標本を再現不能にする「並べ替える前に固定」の罠
  • リストを 公平なランダムグループ に分ける方法(ランダム振り分け)

すべての裏にある唯一のパターン:ランダムキー → 並べ替え → 取る

ここにある発想は実は 1 つだけで、以下のどの方法もその衣装違いにすぎません。

  1. 各行にランダムな数を 付ける
  2. その数で行を 並べ替える
  3. 必要な分だけ上から 取る(シャッフルなら全部取る)。

並び順がランダムなので、リストの上部はランダムな部分集合になり、並べ替わったリスト全体は シャッフルになります。それだけです。サンプリング、シャッフル、当選者の抽選、チーム分け — すべてが「ランダム性で並べ替えて、切り出す」です。それが見えれば、5 つのレシピを暗記するの ではなく、1 つを応用しているだけになります。

最新の 1 行(Excel 365)

365 では RANDARRAY がランダムキーを作り、SORTBY が並べ 替え、TAKE が上部を切り出します — 数式 1 本、補助列 なし、しかもスピルします。

=SORTBY(A2:A100, RANDARRAY(ROWS(A2:A100)))            ' リスト全体をシャッフル
=TAKE(SORTBY(A2:C500, RANDARRAY(ROWS(A2:C500))), 10)  ' 全列そのままで 10 行をランダムに

RANDARRAY(ROWS(range)) は行ごとにちょうど 1 つのランダムキーを生成し、SORTBY はそのキー で行を並べ替え、TAKE(..., 10) は最初の 10 件を残します。各行が自分だけの別々のキーを受け 取り、単に 並べ替えられる だけなので、どの行も 2 回現れ得ません — これが非復元の サンプリングであり、「10 人の顧客のランダム標本」がほぼ常に意味するものです。

古典の方法(どの Excel バージョンでも)

動的配列が登場する前は、同じパターンを補助列で行っていました。今でもどこでも動き、Excel 2019 以前ではこれが正解の道具です。

  1. データの隣の空いた列に =RAND() を入れ、全行にフィルダウンします。
  2. その列をコピーし、形式を選択して貼り付け → 値(これが肝心の手順 — 後述)。
  3. その列でデータを 並べ替え ます。
  4. 上位 N 行があなたのランダム標本、全体はもうシャッフル済みです。

同じ 3 手 — ランダムキー、並べ替え、取る — を手作業でやっているだけです。1 つ のランダム な行を選ぶだけなら、並べ替えを丸ごと省くこともできます。

=INDEX(A2:A100, RANDBETWEEN(1, ROWS(A2:A100)))   ' ランダムな 1 行 — 再利用すると重複し得る

INDEX + RANDBETWEEN を列方向に敷き詰めると 復元抽出 になる — 同じ行が戻ってくる — ことに注意してください。それこそが次の節の主題です。

標本を台無しにする区別:復元抽出 vs 非復元抽出

これは記事全体が組み立てられている洞察です。ここを間違えると、まったく問題なさそうに 見える 間違った答えが生まれるからです。

  • 非復元抽出 — 各行は 多くても 1 回 しか選ばれ得ません。これがランダムキーで並べ 替える方法です。別々の顧客の標本、シャッフル、一意な当選者の抽選、チーム分けに欲しいのは これです。
  • 復元抽出 — 各抽選は独立していて、同じ行が再び選ばれ得ます。これは INDEX(range, RANDBETWEEN(1, n)) の繰り返し、または行番号を生成するために使う RANDBETWEEN です。繰り返しが正当なシミュレーション (ブートストラップ、サイコロ)には正しい選択です。

失敗の仕方は静かで、代償は高くつきます。誰かが =INDEX(list, RANDBETWEEN(1, 500)) を 50 行 にコピーして「50 人の顧客のランダム標本」を作り、その標本には同じ顧客がこっそり 2 回も 3 回 も入り込んでいます。エラーも警告もなく — ただ、2 回引かれた人を過大に重み付けする偏った標本 が残るだけです。ルール:タスクのどこかに「標本」や「一意」という言葉があるなら、必要なの は 非復元抽出 — ランダムキーで並べ替えること。決して RANDBETWEEN の行番号ではありませ ん。

並べ替える前に固定する罠

古典の方法を使う人を刺す、微妙なほうがこれです。RAND()揮発性 — 再計算のたびに振り直します — で、そして 並べ替えは再計算です。ですから 生きた =RAND() 列でデータを並べ替えると、Excel は 並べ替えの 最中に まったく新しいランダム数を生成し、得られる順序はもはや目の前の数と一致 しません。さらに悪いことに、その「標本」はシートに誰かが触れるたびに変わるので、二度と再現 も監査もできなくなります。

直し方は上の手順 2 で、これは省略できません。RAND() 列をコピーし、形式を選択して貼り 付け → 値 で、並べ替える に固定する。 キーが静的な数になれば、並べ替えは安定し、標本 は再現可能になります。監査が必要なもの — コンプライアンス標本、無作為化試験の割り当て — なら 固定したキー(または抽選した日付)を記録しましょう。誰も再現できないランダムな結果は、証拠 として無価値です。

おまけ:リストを公平なランダムグループに分ける

ランダムな 振り分け — 人を N 個のチーム、A/B バケット、シフトに分ける — は、末尾にひとひね り加えた同じパターンです。ランダムキーを付け、それを順位付けし、その順位を MOD でバケットに写します。

' B 列に固定した RAND() キーがある前提で、各行を順位付けして 3 グループに割り当て:
=MOD(RANK(B2, $B$2:$B$100) - 1, 3) + 1     ' -> 1, 2, 3 のいずれか、均等かつランダムに

RANK はランダムキーを 1..N の位置に変え、MOD(..., 3) はその位置をカードを配るように 3 つ のグループに割り振るので、グループはサイズが同じ(±1)でありながらランダムに構成されます。 3 を必要なバケット数に変えるだけです。

判断のポイント

レシピを集めるのはやめて、唯一のパターンを握っておきましょう。ランダムキー → 並べ替え → 取る。 サンプリング、シャッフル、当選者の抽選、グループ振り分けは、すべてこのパターンの 最後の一手が違うだけです。結果が 正しい かどうかを実際に決める判断は 2 つ。1 つ目は復元 の有無 — タスクに「標本」や「一意」があるなら、必要なのは非復元抽出(ランダムキーで並べ 替え)であって、繰り返し得る RANDBETWEEN の抽選ではありません。2 つ目は固定 — 生きた RAND() / RANDARRAY() のキーを、並べ替える前に値へ変換すること。さもないと標本が足元で 振り直され、二度と再現できなくなります。あとはすべて配管仕事にすぎません。

ExcelMaster が役立つ場面

復元の区別は、まさに間違えやすく気づきにくいものです。ExcelMaster に「このリストから 30 人の顧客をランダムに、重複なしで選んで」と伝えれば、静かに二重計上してしまう RANDBETWEEN 方式ではなく、=TAKE(SORTBY(range, RANDARRAY(ROWS(range))), 30) — 非復元の方法 — を組み 立てます。「この名前をシャッフルして」や「この名簿を 4 チームにランダムに分けて」と頼めば、 ランダムキーで並べ替える数式や MOD でバケットに割る数式を書き、ランダムキーを値へ固定して 結果が動かないよう念を押します。あなたは抽選を説明するだけ。統計的に正しい仕組みを選び、 再現可能に保つのは ExcelMaster の仕事です。

よくある質問

Excel で行をランダムに選ぶには?

各行にランダムな数を付け、それで並べ替えます。Excel 365 なら数式 1 本です。 =TAKE(SORTBY(data, RANDARRAY(ROWS(data))), n)n 行を重複なしで返します。どのバージョン でも、=RAND() の補助列を足し、コピー → 形式を選択して貼り付け → 値 で固定し、その列で並べ 替えて上位 n 行を取ります。

Excel でリストをランダム(シャッフル)にするには?

ランダムキーでリストを並べ替えます。最新:=SORTBY(range, RANDARRAY(ROWS(range))) がリスト 全体をランダムな順序で返します。古典:=RAND() を補助列に入れて値へ固定し、その列でデータ を並べ替えます。どちらも各項目をちょうど 1 回ずつ並べ替えます。

復元抽出と非復元抽出の違いは何ですか?

非復元抽出 は各行が多くても 1 回しか選ばれないこと — ランダムキーで並べ替える方法 (SORTBY + RANDARRAY、または固定した RAND 列)です。復元抽出 は同じ行が複数回選ばれ 得ること — INDEX(range, RANDBETWEEN(1, n)) の繰り返しです。別々の項目の本物の標本には非 復元を、繰り返しが意図されたシミュレーションにのみ復元を使います。

ランダム標本が毎回変わるのはなぜですか?

RAND()RANDARRAY() が揮発性で、再計算のたびに振り直すからです。標本が生きたランダム 数式で駆動されていると、シートが再計算されるたびに中身が違ってきます。並べ替えたり標本を 記録したりする前に、ランダム値を先に固定してください — 選択し、コピーして、形式を選択して 貼り付け → 値 です。

Excel で項目をランダムにグループへ割り当てるには?

=RAND() キーを付けて固定し、その順位をバケットに割ります。 =MOD(RANK(key, keyrange) - 1, N) + 1 が各行を N グループのいずれかに、均等かつランダムに 割り当てます。N を必要なグループ数に変えます(3 チームなら 3、A/B 分けなら 2、という具合 です)。

検証環境

検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-11。

関連ガイド: Excel RAND & RANDBETWEEN · Excel RANDARRAY · Excel SORT & SORTBY · Excel TAKE & DROP