概要
VBAを使ったテストデータの自動生成の検討記事です。
今回は前々回に掲載した半角英数字文字列の自動生成の拡張版です。
VBAによるテストデータの自動生成(半角英数字)
拡張は、前回実装したランダム文字列部品を利用します。
VBAによるテストデータの自動生成(ランダム文字列部品)
拡張方法
前回実装した部品をテストデータの自動生成(半角英数字)で作成した処理に組み込みます。
前回実装した部品
文字種の生成 :getBaseStr()
ランダムな文字列生成 :getRandomStr(basestr As String, itemlen As Integer)
なお、他のモジュールでも参照して利用出来るように、Publicのスコープを明示しました。
同一モジュール内に実装する場合は不要です。
' ' 文字種の生成(英字(大文字・小文字)+数字) ' Public Function getBaseStr() As String
' ランダムな文字列生成 ' ' #1 basestr 文字種 ' #2 itemlen 長さ ' Public Function getRandomStr(basestr As String, itemlen As Integer) As String
具体的な例1 固定長文字列の生成
今回の拡張を踏まえて条件設定の具体的な例を示します。
拡張前後の相違は、文字種と生成文字列の内容になります。
さらに後半においてこの例でサンプル実装してみます。
項目 | 条件(ルール) |
---|---|
文字種 | 半角数字、半角英字(大文字・小文字)(固定) |
生成文字列 | 可変 |
長さ | 20 |
可変長固定長 | 固定長 |
生成件数 | 100件 |
具体的な例2 可変長文字列の生成
今回の拡張を踏まえて条件設定の具体的な例を示します。
拡張前後の相違は、文字種と生成文字列の内容になります。
さらに後半においてこの例でサンプル実装してみます。
項目 | 条件(ルール) |
---|---|
文字種 | 半角数字、半角英字(大文字・小文字)(固定) |
生成文字列 | 可変 |
長さ | 20 |
可変長固定長 | 可変長 |
生成件数 | 100件 |
実装例
例1 固定長文字列の生成のサンプルコード
拡張前と同様、値は自動生成した後、検証のためExcelシートに書き出す仕様とします。
実際にテストデータ作成ツールとして使用する際には
他の項目の値も同時に生成して
レコード単位でデータを書き込むような実装になると思います。
コード
' ' 半角文字列(英数字)の自動生成(拡張版) ' ' 文字列をランダムに ' Sub make03() '----- 生成条件のする値の条件設定 ----- '文字種 Dim base_str As String 'base_str = "ABCDEFGHIJ0123456789" base_str = getBaseStr() '長さ Dim item_len As Integer item_len = 20 '可変長・固定長(F:固定長、V:可変長) Dim type_str As String type_str = "F" 'NULL許容(Y:NULLあり、N:NULLなし) 'not_null = "Y" 'Unique制約(Y:制約あり、N:制約なし) 'is_unique = "Y" '生成件数 Dim data_count As Integer data_count = 100 '生成したテストデータを展開するシート Dim p As Worksheet Set p = Worksheets("半角データ2") Dim pcount As Integer pcount = 0 Dim i As Integer Dim tmp_item_len As Integer '----- 自動生成部分 ----- '件数分、処理を繰り返す For i = 1 To data_count DoEvents '長さ決定 If type_str = "F" Then '固定長 tmp_item_len = item_len Else '可変長 tmp_item_len = Int(item_len * Rnd + 1) End If p.Cells(i, 1) = i 'データ連番データ生成 'p.Cells(i, 2) = Left(base_str, tmp_item_len) p.Cells(i, 2) = getRandomStr(base_str, tmp_item_len) Next End End Sub
説明
ほとんど前回のソースコードと変わりませんが
以下が拡張に伴う変更箇所になります。
11行め:前回の文字種定義、コメント化(前回実装部分)
12行め:今回の文字種定義拡張部分、実装したgetBaseStr()で文字種を生成させています。
56行め:前回の文字列生成部分、コメント化(前回実装部分)
57行め:今回の文字列生成拡張部分、実装したgetRandomStr()で文字列を生成させてExcelシートにセットしています。
また、Excelシートは「半角データ2」を使用しています。
他はまったく変更ありません。
実行結果
Excelシートに自動生成した値がセットされています。
文字種の種類が増えて文字の並びもランダムになっています。
文字数は固定長指定なので一律20文字です。
(1行め~100行め)
例2 可変長文字列の生成のサンプルコード
例1と同様にすすめます。
異なるのは文字列の長さを可変長指定にしたところです。
サンプルコードも例1の18行めを除き、まったく同じです。
コード
' ' 半角文字列(英数字)の自動生成(拡張版) ' ' 文字列をランダムに ' Sub make03() '----- 生成条件のする値の条件設定 ----- '文字種 Dim base_str As String 'base_str = "ABCDEFGHIJ0123456789" base_str = getBaseStr() '長さ Dim item_len As Integer item_len = 20 '可変長・固定長(F:固定長、V:可変長) Dim type_str As String type_str = "V" 'NULL許容(Y:NULLあり、N:NULLなし) 'not_null = "Y" 'Unique制約(Y:制約あり、N:制約なし) 'is_unique = "Y" '生成件数 Dim data_count As Integer data_count = 100 '生成したテストデータを展開するシート Dim p As Worksheet Set p = Worksheets("半角データ2") Dim pcount As Integer pcount = 0 Dim i As Integer Dim tmp_item_len As Integer '----- 自動生成部分 ----- '件数分、処理を繰り返す For i = 1 To data_count DoEvents '長さ決定 If type_str = "F" Then '固定長 tmp_item_len = item_len Else '可変長 tmp_item_len = Int(item_len * Rnd + 1) End If p.Cells(i, 1) = i 'データ連番データ生成 'p.Cells(i, 2) = Left(base_str, tmp_item_len) p.Cells(i, 2) = getRandomStr(base_str, tmp_item_len) Next End End Sub
説明
例1と同様です。
可変長指定なので、57行めでgetRandomStrに渡す長さ(tmp_item_len)の値が可変になります。
実行結果
Excelシートに自動生成した値がセットされています。
文字種の種類が増えて文字の並びもランダムになっています。
文字数は可変長指定なので1~20文字までのパターンがあります。
項目の値に可変性が求められる場合でも、これでだいぶ用が足りすのではないでしょうか。
また、文字種に半角記号や全角文字を混ぜたい、または文字を制限したい場合はgetBaseStr()の内容を変更するだけになります。
(1行め~100行め)
いきなりテストデータ生成用のツールを作るのではなく
本ページのように機能毎に部品化して開発すると
生成可能な値を目で検証しながら成長させつつ
汎用的なツールを構築していくことが出来ます。