【Excel】VBAで数の異なるワードリストからデータ生成

こんにちは!今回はExcelのVBAを使って、あらかじめ用意したワードリストからランダムに選択し、新しいデータリストを自動で作成する方法をご紹介します。手動でデータを作成するのは手間がかかるので、このコードを使えば自動でランダムなデータを生成できます。例えば、ブログ記事用のデータ作成や、検証データ、計算問題の作成にも活用できます。

前回はワード数が同じ場合のコードをご紹介しましたが、今回は属性ごとに異なるワード数に対応したロジックについて解説します。さまざまな状況に対応できる柔軟なVBAコードの作り方を一緒に学んでいきましょう!

使用するワードリスト

まず使用するワードリストについて解説します。
ワードリストの構成
ワードリストは「候補」のワークシート上に、「№」「品番」「工程」「開始時」「開始分」「終了時」「終了分」という構成となっており、今回はデータを列ごとに異なりますが、4~12行分作成しました。

作成するデータ数

ワードリストから作成するデータの数は下図の赤枠で指定しています。

VBAの実行結果

VBAを実行した結果下図のような結果を得る事が出来ます。この組合せは実行の都度ランダムで違う結果を得ることが出来ます。

コード解説★★★(コピーはここ)★★★

解説

このVBAコードは、各機能を独立したサブルーチンに分割し、メインサブルーチン「RANDAM」からそれらを順番に呼び出す構造で作成されています。以下はコードの流れです。
  1. 設定 (Setting): ワードリストやデータリストのシート名、セル位置を指定します。
  2. セル情報の数値化 (Change): 指定したセルの位置を行・列の数値に変換します。
  3. 情報取得 (Get_Info): ワードリストの行数・列数や生成するデータの数を取得します。
  4. 配列の準備 (ReSize): ワードリストと結果データを格納する配列を設定します。
  5. ワードの取得 (GetWord): ワードリストの内容を配列に格納します。
  6. ランダム選択 (Lottery): ワードリストからランダムに選択し、新しいデータリストを作成します。
  7. データの格納 (Paste): 作成したデータリストを指定のセルに出力します。

「RANDAM」サブルーチンはこれらの機能を順番に呼び出すことで、柔軟かつ効率的に新しいデータリストを作成します。各機能が分割されているため、コードのメンテナンスや拡張が容易です。

変数の宣言

使用する変数やワークシートオブジェクト、配列を宣言しています。今回は複数のSUBで利用する事から「Private」で宣言を行っています。

メインコード

この「RANDAM」マクロは、各処理を順に呼び出して実行します。ボタンなどからこのマクロを指定することで、ワードリストから無作為にデータを抽出してデータリストを生成するプロセスが開始されます。

設定入力セクション

この処理で使用するワークシート名やセル位置を指定します。コピーして使用する際は、自身のExcelに合わせて以下の項目を変更してください。

2行目:ワードリストのワークシート名 例:候補
3行目:ワードリストの開始セル 例:B4
4行目:作成したデータリストを出力するワークシート名 例:結果
5行目:作成したデータリスト開始セル 例:C3
6行目:データリストの作成行数を指定したセル 例:D2

セル情報の数値化

文字で指定したセルの位置を数値に変換しています。
2行目:ワードリストの開始セル「B4」の行数を変数に入力
3行目:ワードリストの開始セル「B4」の列数を変数に入力

データリスト作成に必要な情報の取得

ワードリストの行列数を取得しています。
2行目:「候補」シートの「B4」セルを含む表の行数を変数に格納する。
3行目:「候補」シートの「B4」セルを含む表の列数を変数に格納する。
4行目:作成するデータリストの行数を変数に格納する。

配列サイズの変更

処理の中で使用する配列のサイズを変更します。

2行目:ワードを格納する配列サイズを表に合わせて変更
3行目:データリストへ入力する結果を格納する配列サイズを作成するデータ数に合わせて変更

ワードリストの候補を配列に格納

Wordsという配列へワードリストのデータを一括取得しています。
2行目:3行目の処理はWordWsのワークシートが対象である。
3行目:ワードリストの内容を一括で配列に格納する。
4行目:2行目のシート指定はここまで。

ワードリストからランダムに選択しデータリストを作成

配列に格納したワードリストから列ごとに無作為抽出してデータリストを作成します。
2行目:変数 i を 1 から DataCount まで増やしながら、3 ~ 7 行目を繰り返します。
3行目:変数 j を 1 から Word_Column まで増やしながら、4 ~ 6 行目を繰り返します。

4行目:Do ループを開始し、45行目の処理を繰り返します。条件が満たされるまでループします。
5行目:変数 RandomIndex に、2 から Word_Row までの範囲でランダムな整数を設定します。【1はヘッダー情報】
6行目:配列 WORDrandomIndex, j に格納されている文字が空でないかを確認し、空の場合は 4行目に戻って再度ランダムなインデックスを選びます。
7行目:Results(i, j-1)WORD(randomIndex, j) の値を格納します。
8行目:変数 j を 1 増やし、3行目に戻って次の列を処理します。
9行目:変数 i を 1 増やし、2行目に戻って次の行を処理します。

データリストの格納

作成したデータリストを指定したシートのセルへ入力する。

使用している技術

基本:DO-LOOP、FOR-NEXT、二次元配列、配列、RND、ReDIM

まとめ

今回の記事では、VBAを使用して異なる数のワードリストからランダムにデータを選択し、新しいデータリストを作成する方法について詳しく解説しました。コードは機能ごとに分割され、設定や情報取得、配列のサイズ変更、ワードの選択、データの格納といった一連のプロセスを順を追って説明しています。これにより、柔軟で再利用可能なVBAコードの作成方法を学ぶことができます。VBAを使ったデータ操作のスキルアップにぜひ役立ててください。

コメント

タイトルとURLをコピーしました