VBAによるテストデータの自動生成(半角英数字)拡張版

概要

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行め)




いきなりテストデータ生成用のツールを作るのではなく
本ページのように機能毎に部品化して開発すると
生成可能な値を目で検証しながら成長させつつ
汎用的なツールを構築していくことが出来ます。

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