VBAのIE(InternetExplorer)制御で役立つ生年月日をランダムで自動生成する制御方法について解説しています。
前回の「ニックネームをランダムで自動生成」ではニックネームを自動生成する方法を解説しましたが、今回は生年月日をランダム自動生成する方法について解説します。こちらも登録時には必要となる場合がある項目です。
以下が今回の処理の流れになります。
Year関数は指定した日付から「年」をを返す関数です。
構文 | Year(DateValue) | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
DateValue | × | 年を抽出する日付型 (Date) の値。 |
Date関数は現在の日付をを返す関数です。
構文 | Date | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
なし | - | 現在の日付を返す。 |
makeRndIntは指定した範囲でランダム(乱数)の整数を取得するマクロです。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には取得する整数の「最小値」「最大値」の2つが設定されています。以下が引数の詳細になります。
構文 | makeRndInt(minInt, maxInt) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
minInt | Integer | 取得する整数の最小値 | 0 | × | |
maxInt | Integer | 取得する整数の最大値 | 100 | × |
「minInt」「maxInt」は必須項目です。「minInt」には取得する整数の最小値を設定します。「maxInt」には取得する整数の最大値を設定します。
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桁表示に変換することもできます。続いてサブルーチンを作成していきましょう。
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桁で取得できます。
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部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。
ExcelのVBA初心者入門↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。
こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。
こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。
こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。
こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。