Excel でデータリストのランダムグループを素早く生成する
日常業務や学習・トレーニングセッションの準備中に、名前や学生 ID、プロジェクトタスクなどのデータリストをランダムにグループ分けする必要が生じることがあります。たとえば、スクリーンショット1に示されているように、データ項目がランダムにグループに割り当てられたり、スクリーンショット2に示されているように、アクティビティやグループタスクのために名前がランダムなチームに分割されたりします。この作業を効率的にこなせば、公平性を確保でき、手動での割り当てと比べて大幅な時間節約にもつながります。幸いなことに、Excel には数式、VBA による自動化、PivotTable 分析など、ランダムグループ割り当てを迅速かつ柔軟に処理できる信頼性の高い方法がいくつも用意されています。
| スクリーンショット1 | スクリーンショット2 |
![]() | ![]() |
VBA でランダムグループ割り当てを自動化する(詳細オプション)
データリストを指定された数のグループにランダムに割り当て、各グループのサイズが異なってもかまわない場合、Excel の CHOOSE 関数と RANDBETWEEN 関数を組み合わせれば、簡単に実現できます。このようなケースの例としては、ゲーム参加者のチーム編成や会議での即席グループ分けなどが挙げられます。
まず、リストの隣にある空白セル(たとえば、リストが A 列にある場合は B2 セル)を選択します。次に、以下の数式を入力してください。
=CHOOSE(RANDBETWEEN(1,3),「Group A」,「Group B」,「Group C 」)
この数式では:
- RANDBETWEEN(1,3)は、1 から3 までの乱数を生成し、それぞれが3 つのグループのいずれかを表します。
- グループ A、グループ B、およびグループ Cは、データの横に表示されるグループ名です。
その後、フィルハンドルを下にドラッグしてこの数式を他の行にも適用し、すべてのエントリをランダムにグループに割り当てましょう。
この手順の後、各データエントリがランダムにグループに割り当てられます。ただし、RANDBETWEEN は揮発性関数のため、セルの編集やファイルの再開などワークシートが再計算されるたびに結果が変更されますのでご注意ください。
実用的なヒント:割り当て結果を変更したくない場合は、数式の結果をコピーして特殊貼り付け > 値で貼り付け、割り当てを固定してください。
適用可能なシナリオ:この方法は柔軟性に優れ、素早く手軽にグループ分けを行うのに最適です。ただし、各グループのサイズがばらつく可能性があるため、厳密な均等分配が求められる場面には向きません。
注意点:大規模なデータセットを扱う場合や、正確なグループサイズが求められる場合は、より細やかな制御が可能な他の方法をご検討ください。

KUTOOLS AI でExcel の魔法を解き放ちましょう
- スマート実行:セル操作、データ分析、チャート作成をすべてシンプルなコマンドで実現します。
- カスタム数式:ワークフローの効率化に役立つ、あなただけのカスタマイズ数式を生成します。
- VBA コーディング:VBA コードを簡単に記述・実装できます。
- 数式の解釈:複雑な数式が簡単に理解できます。
- テキスト翻訳:スプレッドシート内で言語の壁を乗り越えましょう!
各グループに一定数のエントリ(例:各グループ4 名)を含むようにデータをランダムに割り当てるには、Excel の ROUNDUP 関数と RANK 関数を組み合わせるのが効果的です。授業での課題割り当てやバランスの取れたチーム編成など、均一なグループサイズが求められるあらゆるシーンで活用できます。
この方法を実行するには:
1.まず、データの隣に補助列(例:E 列)を追加し、E2 セルに次の内容を入力します。
=RAND()
この数式をリスト内の必要なすべてのセルまで下にドラッグしてください。RAND 関数によって、各エントリにランダムな値が自動的に割り当てられます。
2.次の列(例:F2 セル)に、以下の数式を入力してください。
=ROUNDUP(RANK(E2,$E$2:$E$13)/4,0)
ここで:
- E2:E13:この範囲は、ご自身のデータに合わせて変更してください。=RAND()関数を含むすべての行をカバーする必要があります。
- 4:各グループの人数です。グループごとに異なる人数が必要な場合は、この数値を変更してください。
フィルハンドルを下にドラッグして、この数式をすべての行に適用しましょう。これにより、データがおよそ4 エントリずつのグループに分類されます。
追加のガイダンス:
- アイテムの総数がグループサイズで割り切れない場合、最後のグループには fewer エントリが含まれることがあります。
- ランダム化後は、特殊貼り付け > 値を使ってグループを固定し、再計算時の変更を防ぎましょう。
- RAND() を更新すると、グループが再ランダム化されます。初期割り当てを調整したいときに便利です。
制限事項:この方法ではグループ名を直接指定できず、代わりにグループ番号が自動生成されます。また、大規模なデータセットでは数式による再計算が遅くなる可能性があります。
メンバーが複数のグループに所属しないことの保証、グループサイズの厳密な均等化、特定の制約に基づく再割り当てなど、より高度な要件をお持ちのユーザーには、VBA がより柔軟な解決策を提供します。このアプローチは、大規模なリストや繰り返しの割り当て作業に特に効果的です。ただし、VBA コードは多くの場合ワークシートのデータを直接変更するため、実行前に必ずファイルを保存してください。
1.開発者ツール > Visual Basicをクリックして VBA エディターを開き、次に挿入 > 標準モジュールをクリックします。新しいモジュールに以下のコードをコピー&ペーストしてください。
Sub AssignRandomGroups()
Dim GroupCount As Integer
Dim GroupSize As Integer
Dim rng As Range, cell As Range
Dim i As Long, j As Long, idx As Long
Dim arr() As Variant, groupArr() As Variant, grpNum As Integer
Dim ws As Worksheet
Dim totalRows As Integer, remaining As Integer
On Error Resume Next
Set ws = Application.ActiveSheet
Set rng = Application.InputBox("Select the range of data to group", "KutoolsforExcel", Type:=8)
GroupCount = Application.InputBox("Enter the number of groups:", "KutoolsforExcel", 3, Type:=1)
If rng Is Nothing Or GroupCount <= 0 Then Exit Sub
arr = rng.Value
totalRows = UBound(arr, 1)
GroupSize = Int(totalRows / GroupCount)
remaining = totalRows - GroupSize * GroupCount
ReDim groupArr(1 To totalRows)
Dim used() As Boolean
ReDim used(1 To totalRows)
Randomize
For i = 1 To totalRows
Do
idx = Int(Rnd() * totalRows) + 1
Loop While used(idx)
used(idx) = True
groupArr(i) = idx
Next i
For i = 1 To totalRows
grpNum = Int((i - 1) / GroupSize) + 1
If grpNum > GroupCount Then grpNum = GroupCount
rng.Cells(groupArr(i), 1).Offset(0, 1).Value = "Group " & grpNum
Next i
MsgBox "Groups assigned randomly and as evenly as possible.", vbInformation
End Sub 2.次に、
ボタンをクリックしてコードを実行します。データ範囲(名前や ID が含まれる列など)の選択を求められ、その後、生成したいグループ数を入力します。すると、VBA が各データ行をいずれかのグループに割り当て、そのグループ番号を直後の列に出力します。
- 重複入力防止のための割り当て:各メンバーは1 つのグループにのみ所属します。
- バランスの取れたグループ:できるだけ均等に割り当てます。データを完全に均等に分割できない場合は、最後のグループ(またはグループ群)のメンバー数が1 人多くなるか、または少なくなることがあります。
- カスタマイズ:VBA コードを調整すれば、出力テキストや開始列を自由に変更したり、さらに割り当てルールを追加したりすることも可能です。
注意点:VBA はワークシートのデータを直接変更するため、実行前に必ずバックアップを保存してください。予期しないエラー(想定より多くの列が選択されてしまうなど)が発生した場合は、選択範囲とグループ数の入力を再度ご確認ください。
トラブルシューティング:開発タブが表示されていない場合は、ファイル > オプション > リボンのユーザー設定 > 開発をオンにしてください。エラーが発生した場合は、マクロ設定が有効になっているかご確認ください(ファイル > オプション > トラストセンター)。
ユースケースの利点:VBA は、厳密な制御や大規模データセットの処理、繰り返しタスクの自動化を必要とする上級ユーザーに最適です。ただし、マクロの有効化やコードの記述・修正が必要なため、素早く簡単に実行したい基本的なタスクにはあまり向いていません。
最高の Office 業務効率化ツール
| 🤖 | KUTOOLS AI アシスタント:次に基づいてデータ分析を革新します:インテリジェント実行 | コード生成| カスタム数式作成 | データ分析とチャート生成| 拡張機能呼び出し… |
| 人気の機能:検索・ハイライト、または重複をマーキング | 空白行を削除する | データを失うことなく列の結合またはセルを | 数式を使用しない四捨五入... | |
| スーパー LOOKUP:複数条件 VLookup | 複数値 VLookup | 複数シート間 VLookup | ファジーマッチ.... | |
| 高度なドロップダウンリスト:ドロップダウンリストをすばやく作成 | 連動型ドロップダウンリスト | 複数選択可能なドロップダウンリスト.... | |
| 列マネージャー:指定した数の列を追加|列の移動|非表示列の表示状態を切り替え|範囲および列の比較... | |
| 注目の機能:グリッドフォーカス | デザインビュー |強化された数式バー | ワークブックとシートマネージャー | リソースライブラリ(オートテキスト)| 日付ピッカー | ワークシートの統合 | 暗号化/セルの復号化 | リストからメール送信 | スーパーフィルター | 特殊フィルタ(太字のフォントを持つセルをフィルタリング/斜体/取り消し線。。。) 。。。 | |
| トップ15 ツールセット:12 テキストツール(テキストの追加、特定の文字を削除、...)| 50+チャートタイプ(ガントチャート、...)| 40+実用的関数(誕生日に基づいて年齢を計算します、...)| 19 挿入ツール(QR コードを挿入、パスから画像を挿入、...)| 12 変換ツール(単語に変換する、為替レートの変換、...)| 7 結合と分割ツール(高度な行のマージ、セルの分割、...)|さらに多数 |
Kutools for Excel でExcel スキルを強化し、これまでにない効率を体験しましょう。Kutools for Excel は、生産性を高め、時間を大幅に節約できる高度な機能を300 以上提供します。最も必要な機能を今すぐ入手するにはこちらをクリック。。。
Office Tab は Office にタブインターフェースをもたらし、作業を大幅に簡単にします
- Word、Excel、PowerPoint でタブを使った編集と閲覧を有効にします。Publisher、Access、Visio、Project でもご利用いただけます。
- 複数のドキュメントを、新しいウィンドウではなく、同じウィンドウ内の新しいタブで開いたり作成したりできます。
- 日々の生産性を50%も向上させ、毎日数百回ものマウスクリックを削減します!
すべてのKutools アドインが、たった1 つのインストーラーで完結。
Kutools for Officeスイートには、Excel ・Word ・Outlook ・PowerPoint 用のアドインと Office Tab Pro が含まれており、複数の Office アプリを横断して作業するチームに最適です。
- オールインワンスイート— Excel、Word、Outlook、PowerPoint 用アドイン+Office Tab Pro
- インストーラー1 つ、ライセンス1 つ— 数分でセットアップ可能(MSI 対応)
- 連携してさらにパワーアップ— Office アプリ全体で生産性が向上
- 30 日間のフル機能トライアル— 登録不要、クレジットカード不要
- 最高のお得感— 個別アドイン購入よりお得

