では、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.