VBAによるテストデータの自動生成(数値)

概要

VBAを使ったテストデータの自動生成の検討記事です。
今回は数値の自動生成です。

検討

数値の生成については整数、小数、最小値、最大値、符号有無などのパターンが考えられます。
今回はシンプルに整数部と小数部の桁数だけで自動生成してみます。
自動生成するにあたり、必要となる条件(ルール)と具体的な例を書き上げてみます。

データ生成のネタ

数値の自動生成のための条件を挙げてみました。

条件名内容
整数部桁数整数部の桁数を指定します。
小数部桁数小数部の桁数を指定します。
符号有無マイナス符号の有無を指定します。
最大値値の最大値を指定します。
最小値値の最小値を指定します。
Not Null属性Nullを許すかどうか指定します。
生成件数テストデータの生成件数を指定します。

今回はシンプルに説明をすすめるため最大値、最小値、Not Null属性は省いて話を進めます。

具体的な例 固定長文字列の生成

条件設定の具体的な例を示します。
さらに後半においてこの例でサンプル実装してみます。

項目条件(ルール)
整数部桁数5
小数部桁数2
符号有無あり
生成件数テストデータの生成件数を指定します。

実装例

サンプルコード

値は自動生成した後、検証のためExcelシートに書き出す仕様とします。

実際にテストデータ作成ツールとして使用する際には
他の項目の値も同時に生成して
レコード単位でデータを書き込むような実装になると思います。

コード

'
' 数値の自動生成
'
Sub make04()

    '----- 生成条件のする値の条件設定 -----
    '桁数
    Dim digit1 As Integer
    digit1 = 5
    '小数点以下桁数
    Dim digit2 As Integer
    digit2 = 2
    '符号有無
    Dim hassign As Boolean
    hassign = True
    
    '生成件数
    Dim data_count As Integer
    data_count = 100
    
    '生成したテストデータを展開するシート
    Dim p As Worksheet
    Set p = Worksheets("数値データ")
    
    Dim i As Integer
    
    Randomize
    
    '整数部の数
    Dim numval1 As String
    '小数部の数
    Dim numval2 As String
    '符号
    Dim sign As String
    sign = ""
    
    '----- 自動生成部分 -----
    '件数分、処理を繰り返す
    For i = 1 To data_count
    
        DoEvents
            
        '番号
        p.Cells(i, 1) = i

        '数値データ生成
        If digit1 > 0 Then
            numval1 = Trim(Str(Int(10 ^ digit1 * Rnd + 1)))
        Else
            numval1 = "0"
        End If
        
        If digit2 > 0 Then
            numval2 = Trim(Str(Int(10 ^ digit2 * Rnd + 1)))
        Else
            numval2 = "0"
        End If
        
        '符号決定
        If hassign Then
            If Int(2 * Rnd) = 0 Then
                sign = ""
            Else
                sign = "-"
            End If
        End If
        
        '数値データセット
        p.Cells(i, 2) = "'" + sign + numval1 + "." + numval2
    
    Next

    End

End Sub
説明

全体的な説明はコメントを参照
9行め:整数部桁数の指定をしています。(5桁)
    実際に自動生成している箇所は48行めです。
    桁数の表現はべき乗を使っています。
12行め:小数部桁数の指定をしています。(2桁)
    実際に自動生成している箇所は54行めです。
    桁数の表現はべき乗を使っています。
15行め:符号の有無の指定をしています。(有)
    実際に自動生成している箇所は61行めです。
    0か1を生成して有無の判断に使用しています。
53行め:自動生成した数値データの整数部、小数部、符号を組み合わせて自動生成の値として、Excelシートへセット

実行結果

Excelシートに自動生成した値がセットされています。
整数部の最大桁数が5桁、小数部が2桁、またランダムでマイナス符号がついています。

いきなり数値で自動生成するのではなく、文字列で編集することで比較的複雑な値の生成もシンプルです。
(1行め~100行め)





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

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