【VBA】ランダムに名前を選んでセルに配置する方法|重複なしで自動振り分け

Excel VBAを活用すると、指定した名前リストからランダムに抽出し、セルに自動で配置する処理が簡単に実現できます。
本記事では、重複のないランダムな名前の抽出とセル配置の手順について、VBAコードとあわせてご紹介いたします。


実現したいこと

  • 名前リストから ランダムに6人を選抜
  • 選ばれた名前を セルに2列ずつ3行で配置
  • 重複を避けて選択(同じ名前が複数回選ばれないように)

使用するVBAコード

以下のコードを標準モジュールに貼り付けて実行すれば、アクティブセルの右隣からランダムに選ばれた名前が配置されます。

Sub FillNamesNextToTargetCell()

    Dim TargetCell As Range
    Dim NameList As Variant
    Dim SelectedNames() As String
    Dim i As Integer, j As Integer
    Dim TempName As String, RandomIndex As Integer

    ' 対象のセルをアクティブなセルとして設定
    Set TargetCell = ActiveCell

    ' 名前のリスト
    NameList = Array("森", "小森", "中森", "大森", "林", "小林", "中林", "大林", "小木", "中木", "大木")
    
    ' リストからランダムに6人選抜
    ReDim SelectedNames(1 To 6)
    For i = 1 To 6
        Do
            RandomIndex = Int(Rnd() * UBound(NameList) + 1)
            TempName = NameList(RandomIndex - 1)
        Loop Until Not IsInArray(TempName, SelectedNames)
        SelectedNames(i) = TempName
    Next i

    ' 選ばれた名前を3行×2列に配置
    j = 1
    For i = 1 To 6 Step 2
        TargetCell.Offset(j - 1, 1).Value = SelectedNames(i)
        TargetCell.Offset(j - 1, 2).Value = SelectedNames(i + 1)
        j = j + 1
    Next i

End Sub

判定用関数(重複確認)

Function IsInArray(valToBeFound As Variant, arr As Variant) As Boolean
    Dim element As Variant
    On Error GoTo ErrorHandler
    For Each element In arr
        If element = valToBeFound Then
            IsInArray = True
            Exit Function
        End If
    Next element
ExitFunction:
    Exit Function
ErrorHandler:
    IsInArray = False
    Resume ExitFunction
End Function

コードの説明

メイン処理:FillNamesNextToTargetCell

  • TargetCell = ActiveCell
     配置の起点を、実行時に選択されているセルに設定します。
  • NameList
     ランダム選出対象となる名前の一覧です。任意の人数・名前に変更可能です。
  • SelectedNames
     ランダムで6名選抜し、重複を避けて選択するよう制御されています。
  • Offset(j - 1, 1)
     アクティブセルの右側に、2列分の名前を3行で配置します。

判定関数:IsInArray

この関数は、すでに選ばれた名前の中に同じ名前が含まれていないかを判定します。
重複を排除するための重要な補助関数です。


注意点と補足

  • Rnd() はExcelを起動するたびに同じ乱数系列を返す可能性があります。必要に応じて Randomize を使って乱数の初期化を行うとより自然なランダム性が得られます。
Randomize
  • 名前のリストが6名未満の場合、このコードは無限ループに陥る可能性があります。最低でも6名以上のリストが必要です。

まとめ

Excel VBAを使えば、ランダムなグループ分けや抽選処理を自動化することが可能です。
今回のようなサンプルコードを活用することで、重複なしの選出・整ったセル配置が簡単に実装できます。

  • 名前リストからランダム抽出
  • 重複回避のためのチェック関数付き
  • 配置レイアウトも柔軟にカスタマイズ可能

日常の業務効率化やイベントでの抽選処理など、さまざまな用途にご活用ください。
最後までお読みいただき、ありがとうございました。

スクールの紹介

最後に宣伝をさせてください。

夢見るAIエンジニアへ、今こそ一歩を踏み出せ!

最近、AI技術やデータサイエンスに興味を持ち始めたあなた。将来、AIエンジニアやデータサイエンティストとして活躍したいと考えているかもしれません。また、AIを使って業務課題や研究課題を解決したい、あるいは教養としてAIの知識を深めたいと思っている方もいるでしょう。

しかし、学び始めるとなると「どこから手をつけて良いのか分からない」「専門的すぎて理解できない」といった悩みが生じることも。そんなあなたのために、この3ヶ月間集中してAIプログラミングを習得するオンラインコーチングサービスがオススメです!

なぜこのサービスが選ばれるのか?その理由はこちら

  1. 初心者から上級者まで
    完全なプログラミング初心者から研究者まで、幅広い方々に優良なコンテンツが提供されます。
  2. 徹底的な進捗管理
    受講者の進捗をしっかりとチェックし、つまずきやすいポイントでのフォローが万全です。
  3. 専属メンターによる徹底サポート
    AIの学び方から、実際の適用まで、専属のメンターが手厚くサポートします。
  4. 場所を選ばず学べるオンライン完結
    東京以外の地域からも、気軽に学び始めることができます。

信頼の実績多数!
・日本最大級のプログラミングスクール実績
・受講者総数700名以上
・SaaS型学習サービス会員65,000名以上
・企業導入実績120社以上
・グッドデザイン賞受賞
・著名な賞受賞歴や経団連加盟も実現

夢を叶えるための第一歩を、一緒に踏み出しませんか?今なら、あなたもその一員として学び始めることができます!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。