見出し画像

VBAで電話番号のダミーデータを作成する

最近、レコード数の多いダミーデータを作成する機会が多くなりました。
普通の数字データだとRANDBETWEEN 関数で間に合っていたのですが、最近は電話番号やメールアドレスなどをダミーデータとしてワークシートに出力することが多くなりました。

今回はVBAを用いて、プロシージャを作成してみました。
まずは電話番号をランダムに作成します。

Function rnd電話番号() As String
    Dim firstNum As String: firstNum = Format("090", "000")
    Dim midNum As String
    Dim lastNum As String
    
    midNum = Format(WorksheetFunction.RandBetween(0, 9999), "0000")
    lastNum = Format(WorksheetFunction.RandBetween(0, 9999), "0000")
    
    rnd電話番号 = firstNum & "-" & midNum & "-" & lastNum

End Function

次は作成する、データの数(今回は10,000)を指定して、重複がないようにユニークな番号を辞書に格納します。
この時、キーを電話番号にし、アイテムは全て1としました。

Sub 電話番号のダミーデータを作成()
    
    Dim mydic As Object
    Set mydic = CreateObject("scripting.dictionary")
    
    Do While mydic.Count < 10000
        If Not mydic.exists(rnd電話番号) Then
            Call mydic.Add(rnd電話番号, 1)
        End If
    Loop
    
    Call 電話番号の転記(Range("L1"), mydic)
    
End Sub

最後は、作成した辞書のキーを指定したセルから、行方向に転機していきます。それをプロシージャ化しました。

Sub 電話番号の転記(ByVal rng As Range, ByVal mydic As Object)
    
    Dim i As Long: i = 0
    Dim vKey As Variant
    For Each vKey In mydic
        rng.Offset(i, 0).Value = vKey
        i = i + 1
    Next
    
End Sub

最近まで辞書を引数で渡すコードを書いたことがなかったのです。
ここで分割すると結構見通しが良くなりました。

この記事が気に入ったらサポートをしてみませんか?