生年月日をランダムで自動生成「birthdayGet」の解説
前回の「ニックネームをランダムで自動生成」ではニックネームを自動生成する方法を解説しましたが、今回は生年月日をランダム自動生成する方法について解説します。こちらも登録時には必要となる場合がある項目です。
目次
- 生年月日をランダムで自動生成する処理の流れ
- 利用する関数・サブルーチンについて
- 生年月日をランダムで自動生成するサンプルコード
- 生年月日をランダムで自動生成するサブルーチン「birthdayGet」の解説
- 「birthdayGet」を利用して生年月日をランダムで自動生成するサンプルコード
- まとめ
生年月日をランダムで自動生成する処理の流れ
以下が今回の処理の流れになります。
- ①変数宣言
- ②生年月日の「年」の取得範囲を設定
- ③「makeRndInt」を利用して、「年」「月」「日」をランダムで取得
- ④「Format関数」を利用して、2桁表示に変更
利用する関数・サブルーチンについて
今回利用する関数・サブルーチンは以下になります。- Year関数とは
- Date関数とは
- makeRndIntとは
- Format関数とは
Year関数とは
Year関数は指定した日付から「年」をを返す関数です。
構文 | Year(DateValue) | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
DateValue | × | 年を抽出する日付型 (Date) の値。 |
Date関数とは
Date関数は現在の日付をを返す関数です。
構文 | Date | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
なし | - | 現在の日付を返す。 |
makeRndIntとは
makeRndIntは指定した範囲でランダム(乱数)の整数を取得するマクロです。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には取得する整数の「最小値」「最大値」の2つが設定されています。以下が引数の詳細になります。
構文 | makeRndInt(minInt, maxInt) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
minInt | Integer | 取得する整数の最小値 | 0 | × | |
maxInt | Integer | 取得する整数の最大値 | 100 | × |
「minInt」「maxInt」は必須項目です。「minInt」には取得する整数の最小値を設定します。「maxInt」には取得する整数の最大値を設定します。
Format関数とは
Format関数はデータを指定した形式に変換する関数です。
構文 | Format(expression[,format[,firstdayofweek[,firstweekofyear]]]) | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
expression | × | 変換元となる任意の式を指定します。 | |||
format | ● | 定義済み書式または表示書式指定文字を指定します。 | |||
firstdayofweek | ● | 週の1日目を指定する定数を指定します。 | |||
firstweekofyear | ● | 年の第1週を指定する定数を指定します。 |
firstdayofweekの設定値 | |||||
---|---|---|---|---|---|
定数 | 値 | 説明 | |||
vbUseSystem | 0 | 各国語対応APIの設定値を使用します。 | |||
vbSunday | 1 | 日曜(既定値) | |||
vbMonday | 2 | 月曜 | |||
vbTuesday | 3 | 火曜 | |||
vbWednesday | 4 | 水曜 | |||
vbThursday | 5 | 木曜 | |||
vbFriday | 6 | 金曜 | |||
vbSaturday | 7 | 土曜 |
firstweekofyearの設定値 | |||||
---|---|---|---|---|---|
定数 | 値 | 説明 | |||
vbUseSystem | 0 | 各国語対応APIの設定値を使用します。 | |||
vbFirstJan1 | 1 | 1月1日を含む週を年度の第1週として扱います(既定値) | |||
vbFirstFourDays | 2 | 年の4日以上が含まれる最初の週を第一週目に指定します。 | |||
vbFirstFullWeek | 3 | 年のうち、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([place]) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
place | Integer | 桁数 | 1,2 | 1 | ● |
「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操作でツイッター情報取得 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。