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

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

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

技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。

プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。

気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。

[Kindle Unlimited 読み放題プランをチェックする]

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

この記事を書いた人

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

目次