生年月日をランダムで自動生成「birthdayGet」の解説

前回の「ニックネームをランダムで自動生成」ではニックネームを自動生成する方法を解説しましたが、今回は生年月日をランダム自動生成する方法について解説します。こちらも登録時には必要となる場合がある項目です。

目次

スポンサー リンク

生年月日をランダムで自動生成する処理の流れ

以下が今回の処理の流れになります。

利用する関数・サブルーチンについて

今回利用する関数・サブルーチンは以下になります。

Year関数とは

Year関数指定した日付から「年」をを返す関数です。

Year("日付")
構文Year(DateValue)
引数省略説明
DateValue×年を抽出する日付型 (Date) の値。

Date関数とは

Date関数現在の日付をを返す関数です。

Date
構文Date
引数省略説明
なし-現在の日付を返す。

makeRndIntとは

makeRndIntは指定した範囲でランダム(乱数)の整数を取得するマクロです。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には取得する整数の「最小値」「最大値」の2つが設定されています。以下が引数の詳細になります。

makeRndInt(取得する整数の最小値, 取得する整数の最大値)
構文makeRndInt(minInt, maxInt)
引数名データ型内容値の事例初期値省略
minIntInteger取得する整数の最小値0×
maxIntInteger取得する整数の最大値100×

「minInt」「maxInt」は必須項目です。「minInt」には取得する整数の最小値を設定します。「maxInt」には取得する整数の最大値を設定します。

Format関数とは

Format関数データを指定した形式に変換する関数です。

Format("データ", "変換する形式")
構文Format(expression[,format[,firstdayofweek[,firstweekofyear]]])
引数省略説明
expression×変換元となる任意の式を指定します。
format定義済み書式または表示書式指定文字を指定します。
firstdayofweek週の1日目を指定する定数を指定します。
firstweekofyear年の第1週を指定する定数を指定します。
firstdayofweekの設定値
定数説明
vbUseSystem0各国語対応APIの設定値を使用します。
vbSunday1日曜(既定値)
vbMonday2月曜
vbTuesday3火曜
vbWednesday4水曜
vbThursday5木曜
vbFriday6金曜
vbSaturday7土曜
firstweekofyearの設定値
定数説明
vbUseSystem0各国語対応APIの設定値を使用します。
vbFirstJan111月1日を含む週を年度の第1週として扱います(既定値)
vbFirstFourDays2年の4日以上が含まれる最初の週を第一週目に指定します。
vbFirstFullWeek3年のうち、7日が含まれる最初の週を第一週目に指定します。

生年月日をランダムで自動生成するサンプルコード

今回のサンプルコードは生年月日をランダムで自動生成するマクロになります。

Sub sample()

    Dim minYear As Integer, maxYear As Integer
    Dim intYear As Integer, intMonth As Integer, intDay As Integer

    minYear = Year(Date) - 80   '今年から80年前
    maxYear = Year(Date) - 20   '今年から20年前
    
    intYear = makeRndInt(minYear, maxYear)
    intMonth = makeRndInt(1, 12)
    intDay = makeRndInt(1, 28)
    
    Debug.Print "生年月日(年):" & intYear
    Debug.Print "生年月日(月):" & intMonth   '1桁
    Debug.Print "生年月日(月):" & Format(intMonth, "00") '2桁
    Debug.Print "生年月日(日):" & intDay   '1桁
    Debug.Print "生年月日(日):" & Format(intDay, "00") '2桁
    
End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

実行結果

ランダムで生年月日の文字列が生成される。
生年月日(日):18
生年月日(年):1958
生年月日(月):3
生年月日(月):03
生年月日(日):2
生年月日(日):02

解説


Dim minYear As Integer, maxYear As Integer
Dim intYear As Integer, intMonth As Integer, intDay As Integer

※ドラッグ(スワイプ)すると全体を確認できます。

型をを宣言します。


minYear = Year(Date) - 80   '今年から80年前
maxYear = Year(Date) - 20   '今年から20年前

※ドラッグ(スワイプ)すると全体を確認できます。

こちらでは取得する「年」の範囲を設定しています。最小年は今年から80年前の「年」に最大年は未成年登録不可のサイトもあるため、20年前の「年」までで設定しています。


intYear = makeRndInt(minYear, maxYear)
intMonth = makeRndInt(1, 12)
intDay = makeRndInt(1, 28)

※ドラッグ(スワイプ)すると全体を確認できます。

makeRndIntを利用して、ランダムで「年」「月」「日」を取得しています。尚、「日」については、月末日が異なるため、28日までで設定しています。


Debug.Print "生年月日(年):" & intYear
Debug.Print "生年月日(月):" & intMonth   '1桁
Debug.Print "生年月日(月):" & Format(intMonth, "00") '2桁
Debug.Print "生年月日(日):" & intDay   '1桁

※ドラッグ(スワイプ)すると全体を確認できます。

「年」「月」「日」を出力していますが、「月」「日」が1桁の場合は、Format関数を利用して、2桁表示に変換することもできます。続いてサブルーチンを作成していきましょう。

生年月日をランダムで自動生成するサブルーチン「birthdayGet」の解説


Function birthdayGet(Optional place As Integer = 1) As Collection

    Dim minYear As Integer, maxYear As Integer
    Dim intYear As String, intMonth As String, intDay As String
    Dim arrBirthday As New Collection

    minYear = Year(Date) - 80   '今年から80年前
    maxYear = Year(Date) - 20   '今年から20年前
    
    intYear = makeRndInt(minYear, maxYear)
    intMonth = makeRndInt(1, 12)
    intDay = makeRndInt(1, 28)
    
    '2桁に変換
    If place <> 1 Then
    a = Format(intMonth, "00")
        intMonth = Format(intMonth, "00")
        intDay = Format(intDay, "00")
    End If

    arrBirthday.Add intYear, "Y" '年
    arrBirthday.Add intMonth, "M"   '月
    arrBirthday.Add intDay, "D"   '日

    Set birthdayGet = arrBirthday

End Function

※ドラッグ(スワイプ)すると全体を確認できます。

こちらが「生年月日をランダムで自動生成するサブルーチン」になります。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には「桁数」の1つが設定されています。以下が引数の詳細になります。

birthdayGet([桁数])
構文birthdayGet([place])
引数名データ型内容値の事例初期値省略
placeInteger桁数1,21

「place」は任意項目です。「place」には、1桁の月日を2桁にする場合2を設定します。こちらを設定することで「1」→「01」のように2桁で取得できます。

「birthdayget」を利用して生年月日をランダムで自動生成するサンプルコード

Sub sample()

    Set arrBirthday = birthdayGet()
    
    Debug.Print "生年月日(年):" & arrBirthday("Y")
    Debug.Print "生年月日(月):" & arrBirthday("M")
    Debug.Print "生年月日(日):" & arrBirthday("D")
    
    Set arrBirthday = birthdayGet(2)
    
    Debug.Print "生年月日(年):" & arrBirthday("Y")
    Debug.Print "生年月日(月):" & arrBirthday("M")
    Debug.Print "生年月日(日):" & arrBirthday("D")

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

実行結果

生年月日(年):1936
生年月日(月):12
生年月日(日):21
生年月日(年):1990
生年月日(月):09
生年月日(日):16

解説

今回は、1桁のパターンと2桁のパターンを表示させています。フォームの選択の値が1桁2桁どちらが利用されているのか確認して判断してください。

まとめ

今回は、birthdayGetサブルーチンを利用して生年月日をランダムで自動生成する方法について解説しました。生年月日を生成してアカウント作成する場合は、必ず文字列はエクセルシートに保存するようにしましょう。

次の記事: VBAのIE操作でツイッター情報取得 >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

VBAのIE制御についてのQ&A掲示板

↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。

ExcelのVBA初心者入門

↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。

目次

IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作のVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作のステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。