では、UserForm1内にプログラムを書いていこう。UserForm1を選択しマウスの右クリックで表示される、[コードの表示]で、マクロのコード画面が表示される(図14)。
UserForm1のイベントとしては「Initialize」などがある。後ほど解説する。
まず、データを登録する際に一番問題となるのは、データを順次追加して登録していくことだ。登録するセルの範囲を直接指定して下記のように書くと、入力して登録される「ID」は「個人情報データ」シートの「A3」に登録され、そのセルにのみ上書きされて登録されることになる。
WorkSheets("個人情報データ").Range("A3").Value=IDラベル.Caption
しかし、それでは大変困る。セル「A3」にデータが登録されていたなら、その次の下のセル「A4」にデータを登録していく必要があるからだ。
そのためには、連載第4回「Excelの基本オブジェクト「セル」の参照、移動、コピー、選択、挿入、削除」でも解説した、終端セルを参照するEndプロパティを使用する。
マクロとしてはリスト1のように記述する。この処理は、A列の最終行から上方向の終端セルを選択し、すなわち、A列の最終行を取得して、データが入っていると、次の行にデータが追加される処理だ。
Dim lastRow As Long With Worksheets("個人情報データ") lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 End With
このリスト1がこのプログラムの一番の肝となる部分だ。このことを頭に入れておいてほしい。後ほど『「登録」ボタンがクリックされたときの処理』のリスト4の最後に使われる。
まずは、「プライベートモジュールレベル」で変数「性別」を文字列型として宣言しておく。「プライベートモジュールレベル」については、連載第3回「マクロが動かない原因の見つけ方とVBAの変数、データ型」の「VBAの変数の有効範囲」を参照してほしい。
Dim 性別 As String
次に、フォームの読み込み中に発生するInitialize(初期化)イベントの処理だ(リスト2)。
Private Sub UserForm_Initialize() Worksheets("個人情報データ").Select IDラベル.Caption = Format(Now, "K" & "yyyymmddHHMMSS") 性別コンボボックス.AddItem "男性" 性別コンボボックス.AddItem "女性" End Sub
「個人情報データ」シートを選択状態にして表示させる。ラベルの[Caption]プロパティを使って、「IDラベル」内に文字列「K」と現在の「年月日時分秒」の値を連結して、これをIDとする。AddItemメソッドを使って「性別コンボボックス」に「男性」「女性」の項目を追加して、選択を可能にする(図15)。
次は「性別コンボボックス」の値が変化したときの処理だ(リスト3)。グローバル変数「性別」に「性別コンボボックス」から選択された値を格納しておく。
Private Sub 性別コンボボックス_Change() 性別 = 性別コンボボックス.Value End Sub
次は、いよいよ「登録」ボタンがクリックされたときの処理だ(リスト4)。このサンプルアプリでは全ての項目が入力必須となっているので、注意してほしい。全てのデータが入力されて「登録」ボタンがクリックされたときの処理だ。
Private Sub 登録ボタン_Click() Dim myRegEx As New RegExp Dim regCheck As Boolean If 氏名テキストボックス.Text = "" Then MsgBox "氏名を入力してください。" Exit Sub End If If 郵便番号テキストボックス.Text = "" Then MsgBox "郵便番号を入力してください。" Exit Sub End If If 住所テキストボックス.Text = "" Then MsgBox "住所を入力してください。" Exit Sub End If If 電話番号テキストボックス.Text = "" Then MsgBox "電話番号を入力してください。" Exit Sub End If If メールテキストボックス.Text = "" Then MsgBox "メールを入力してください。" Exit Sub End If If 性別 = "" Then MsgBox "性別を選択してください。" Exit Sub End If '郵便番号正規表現チェック' myRegEx.Pattern = "^[0-9]{3}[\-]?[0-9]{4}$" regCheck = myRegEx.Test(郵便番号テキストボックス.Text) If regCheck = False Then MsgBox "郵便番号が不正です。" Exit Sub End If '電話番号正規表現チェック' myRegEx.Pattern = "\d{2,4}-\d{2,4}-\d{4}" regCheck = myRegEx.Test(電話番号テキストボックス.Text) If regCheck = False Then MsgBox "電話番号が不正です。" Exit Sub End If 'メール正規表現チェック' myRegEx.Pattern = "[\w\d_-]+@[\w\d_-]+\.[\w\d._-]+" regCheck = myRegEx.Test(メールテキストボックス.Text) If regCheck = False Then MsgBox "メールアドレスが不正です。" Exit Sub End If 'データの登録' Dim lastRow As Long With Worksheets("個人情報データ") lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 .Cells(lastRow, 1).Value = IDラベル.Caption .Cells(lastRow, 2).Value = 氏名テキストボックス.Text .Cells(lastRow, 3).Value = 性別 .Cells(lastRow, 4).Value = 生年月日テキストボックス .Cells(lastRow, 5).Value = 郵便番号テキストボックス .Cells(lastRow, 6).Value = 住所テキストボックス.Text .Cells(lastRow, 7).Value = 電話番号テキストボックス .Cells(lastRow, 8).Value = メールテキストボックス.Text End With IDラベル.Caption = Format(Now, "K" & "yyyymmddHHMMSS") End Sub
Copyright © ITmedia, Inc. All Rights Reserved.