エクセルVBAでランダムに名前を選んでセルに配置する方法【VBA】

目次

経緯

エクセルのVBA(Visual Basic for Applications)は、データの自動処理に非常に便利なツールです。今回は、指定された名前のリストからランダムに名前を選択し、それらを特定のセルに配置する方法について解説します。この技術は、例えばランダムなグループ分けやサンプリングを行う際に有用です。

コード

まず、コードを書きます。

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人ずつ反映
    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

コードの概要

示されたVBAコードは、主に二つの部分で構成されています。Sub FillNamesNextToTargetCell()はメインのサブルーチンで、Function IsInArray()は配列内に特定の値が存在するかを確認する補助的な関数です。

Sub FillNamesNextToTargetCell()

このサブルーチンでは、まずアクティブなセルを対象セルとして設定します。次に、名前のリストが定義され、このリストからランダムに6つの名前が選ばれます。選ばれた名前は、対象セルの隣に3行にわたって2列ずつ配置されます。この部分で、ランダム性を保証するために、既に選択された名前が再度選ばれないように工夫がされています。

Function IsInArray()

この関数は、指定された値が配列内に存在するかどうかを確認します。存在する場合はTrueを、存在しない場合はFalseを返します。この関数は、重複を避けるためにメインのサブルーチン内で使用されています。

注意点と改善の余地

コードを使用する際の注意点としては、Rnd()関数が返す値が0から1未満の範囲であることを理解する必要があります。これにより、UBound(NameList) + 1の計算が重要になります。また、エラーハンドリングが関数内に組み込まれていますが、より複雑なシナリオではさらなるエラーハンドリングが必要になる場合があります。

まとめ

エクセルVBAを使ったランダムな名前の選択と配置は、データの自動処理やサンプリングにおいて大変役立ちます。上述のコード例を参考に、自分のニーズに合わせてカスタマイズし、日常の作業をより効率的に行いましょう。

何かの参考になれば幸いです。

ここまで読んでいただきありがとうございました。

スクールの紹介

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

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

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

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

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

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

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

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

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

この記事を書いた人

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

目次