Excel VBA

【Excel VBA】【マクロ】【Tips】指定した年齢の範囲でランダムで生年月日を出力するマクロ

こんにちは!Lenocoです。本日も見てくださりありがとうございます。

今回はランダムな日付データ作成についてのTips回です!!!

指定した年齢の範囲でランダムで生年月日を出力するマクロ

※前回の記事、「氏名のダミーデータを自動作成するマクロ」とも関連しています!
よければそちらもご確認ください。

ダイアログボックスで最小年齢と最高年齢を指定し、
その範囲内でランダムで生年月日を出力するマクロを作ってみました。
マクロの動作順序は以下の通りです。

ツールの説明

①生年月日を出力するセルを選択
②マクロ実行
③ダイアログボックスを表示し、出力したい件数を入力
④ダイアログボックスを表示じ、最小年齢を入力
⑤ダイアログボックスを表示じ、最大年齢を入力
⑥ダミーデータ出力
⑦完了メッセージ表示
以上

という動きになります。

コード

Sub CreateDummyBirthdayData()
    Dim outputNum As Long           '出力件数保存用
    Dim outputMinAge As Long        '最小年齢
    Dim outputMaxAge As Long        '最高年齢
    Dim tgtDate As Date             '基準日保存用
    
    Dim rand As Long                '乱数保存用
    Dim i As Long                   'ループ用変数
    Dim outputRow As Long           '出力行
    Dim col As Long                 '列番号保存用
    Dim name As String              '氏名保存用
    
    '初期値設定
    outputNum = 0
    outputRow = Selection.Row
    col = Selection.Column
    
    '何件出力するか入力
    outputNum = Application.InputBox("何件出力しますか?", "出力件数確認", "", Type:=1)
    outputMinAge = Application.InputBox("出力したい最小年齢を入力してください。", "最小年齢確認", "", Type:=1)
    outputMaxAge = Application.InputBox("出力したい最高年齢を入力してください。", "最高年齢確認", "", Type:=1)
    
    For i = 1 To outputNum
        rand = Int((outputMaxAge - outputMinAge + 1) * Rnd + outputMinAge)
        tgtDate = DateAdd("yyyy", -rand, Date)
        With ActiveSheet.Cells(outputRow, col)
            .Value = Int((tgtDate - (tgtDate - 364) + 1) * Rnd + (tgtDate - 364))
            .NumberFormatLocal = "yyyy/m/d"
        End With
        outputRow = outputRow + 1
    Next i
    
    MsgBox outputNum & "件出力完了!"

End Sub

コードの説明

まず必要な変数を用意します。
出力件数保存用の「outputNum」と、
最少年齢保存用の「outputMinAge」、最大年齢保存用の「outputMaxAge」をLomg型で宣言します。
そして、基準日保存用に「tgtDate」という変数をDate型で用意しておきます。
乱数保存用に「rand」という変数を作成します。これは、苗字の乱数、名前の乱数どちらにも使用します。
続いて初期値の設定です。
出力件数保存用の変数「outputNum」を0で初期化しておきます。
出力行「outputRow」と出力列「col」に選択しているセルの行番号と列番号を設定します。
続いてダイアログボックスの表示です。
まず、何件出力したいかを入力してもらいます。
続いて、最小年齢、最大年齢をそれぞれ入力します。
すべてApplicationオブジェクトのInputBoxメソッドを使用しています。
※Input関数とInputメソッドがあります。詳しくは「氏名のダミーデータを自動作成するマクロ」をご確認ください。
続いて、For文を使用して指定された出力件数分の生年月日をランダムで生成していきます。
カウンタ変数「i」の初期値を1、最大値を「outputNum」とします。
Int関数とRnd関数を使用し、最小年齢~最大年齢の範囲で整数の乱数を取得します。
※Int関数とRnd関数の構文については「氏名のダミーデータを自動作成するマクロ」で説明していますのでご確認ください。
取得したランダムの年齢を使用し、tgtDate変数に日付を格納します。

tgtDate = DateAdd("yyyy", -rand, Date)

Date関数で現在の日付できます。DateAdd関数で日時に指定した時間を加算することができます。
上記の式で、現在の日付の「年」から取得した年齢を引いた日付が「tgtDate」に入る、ということになります。
たとえば、ランダムで取得した年齢が30歳だった場合、
本日日付が「2021/2/24」なので、tgtDateに入るのは「1991/2/24」となります。
Int関数とRnd関数を使用し、tgtDateの364日前の日付からtgtDateの日付の範囲で整数の乱数を取得し、選択セルに出力します。

.Value = Int((tgtDate - (tgtDate - 364) + 1) * Rnd + (tgtDate - 364))


ループの一回目は、選択セルが出力先となります。

そして、セルの書式設定を日付の形に設定します。
For文の最後で「outputRow」に+1します。
最後に「〇〇件出力完了!」と出力件数と完了メッセージを出力します。

コードの説明は以上となります。

さいごに

上記のマクロを、前回の記事「氏名のダミーデータを自動作成するマクロ」と組み合わせ、生年月日を出力することができるようになります!
機能を追加していき、最終的にはダイアログボックスではなくフォームからの設定としたいので、
また総集編は別のブログで紹介していきますね。

【Excel VBA】【マクロ】【Tips】氏名のダミーデータを自動作成するマクロこんにちは!Lenocoです。本日も見てくださりありがとうございます。 今回はダミーデータ作成についてのTips回です!!! 苗字と名...
【Excel VBA】【マクロ】【Tips】指定した列数に応じて出力列を変更するこんにちは!Lenocoです。本日も見てくださりありがとうございます。 今回は出力列制御についてのTips回です!!! 指定した列数に...
【Excel VBA】【マクロ】【Tips】ユーザーフォームの呼び出し方こんにちは!Lenocoです。本日も見てくださりありがとうございます。 今回はユーザーフォームについてのTips回です!!! 過去の...

Lenoco

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です