VBA-ユーザーフォーム

A User Formは、ユーザーデータ入力をより制御しやすく、ユーザーにとって使いやすいようにするカスタムビルドのダイアログボックスです。この章では、単純なフォームを設計し、Excelにデータを追加する方法を学習します。

Step 1− Alt + F11を押してVBAウィンドウに移動し、[挿入]メニューに移動して[ユーザーフォーム]を選択します。選択すると、次のスクリーンショットに示すようにユーザーフォームが表示されます。

Step 2 −指定されたコントロールを使用してフォームをデザインします。

Step 3−各コントロールを追加した後、コントロールに名前を付ける必要があります。キャプションはフォームに表示されるものに対応し、名前はその要素のVBAコードを記述したときに表示される論理名に対応します。

Step 4 −以下は、追加された各コントロールに対する名前です。

コントロール 論理名 キャプション
から frmempform 従業員フォーム
従業員IDラベルボックス empid 従業員ID
名ラベルボックス ファーストネーム ファーストネーム
姓ラベルボックス 苗字 苗字
dobラベルボックス ドブ 生年月日
mailidラベルボックス mailid 電子メールID
パスポートホルダーラベルボックス パスポートホルダー パスポートホルダー
EmpIDテキストボックス txtempid 適用できません
名のテキストボックス txtfirstname 適用できません
姓のテキストボックス txtlastname 適用できません
メールIDテキストボックス txtemailid 適用できません
日付コンボボックス cmbdate 適用できません
月コンボボックス cmbmonth 適用できません
年コンボボックス cmbyear 適用できません
はいラジオボタン radioyes はい
ラジオボタンなし ラジオノ 番号
送信ボタン btnsubmit 参加する
キャンセルボタン btncancel キャンセル

Step 5 −フォームを右クリックし、[コードの表示]を選択して、フォームの読み込みイベントのコードを追加します。

Step 6 −次のスクリーンショットに示すように、オブジェクトのドロップダウンから「ユーザーフォーム」を選択し、「初期化」メソッドを選択します。

Step 7 −フォームをロードしたら、テキストボックスがクリアされ、ドロップダウンボックスが入力され、ラジオボタンがリセットされていることを確認します。

Private Sub UserForm_Initialize()
   'Empty Emp ID Text box and Set the Cursor 
   txtempid.Value = ""
   txtempid.SetFocus
   
   'Empty all other text box fields
   txtfirstname.Value = ""
   txtlastname.Value = ""
   txtemailid.Value = ""
   
   'Clear All Date of Birth Related Fields
   cmbdate.Clear
   cmbmonth.Clear
   cmbyear.Clear
   
   'Fill Date Drop Down box - Takes 1 to 31
   With cmbdate
      .AddItem "1"
      .AddItem "2"
      .AddItem "3"
      .AddItem "4"
      .AddItem "5"
      .AddItem "6"
      .AddItem "7"
      .AddItem "8"
      .AddItem "9"
      .AddItem "10"
      .AddItem "11"
      .AddItem "12"
      .AddItem "13"
      .AddItem "14"
      .AddItem "15"
      .AddItem "16"
      .AddItem "17"
      .AddItem "18"
      .AddItem "19"
      .AddItem "20"
      .AddItem "21"
      .AddItem "22"
      .AddItem "23"
      .AddItem "24"
      .AddItem "25"
      .AddItem "26"
      .AddItem "27"
      .AddItem "28"
      .AddItem "29"
      .AddItem "30"
      .AddItem "31"
   End With
   
   'Fill Month Drop Down box - Takes Jan to Dec
   With cmbmonth
      .AddItem "JAN"
      .AddItem "FEB"
      .AddItem "MAR"
      .AddItem "APR"
      .AddItem "MAY"
      .AddItem "JUN"
      .AddItem "JUL"
      .AddItem "AUG"
      .AddItem "SEP"
      .AddItem "OCT"
      .AddItem "NOV"
      .AddItem "DEC"
   End With
   
   'Fill Year Drop Down box - Takes 1980 to 2014
   With cmbyear
      .AddItem "1980"
      .AddItem "1981"
      .AddItem "1982"
      .AddItem "1983"
      .AddItem "1984"
      .AddItem "1985"
      .AddItem "1986"
      .AddItem "1987"
      .AddItem "1988"
      .AddItem "1989"
      .AddItem "1990"
      .AddItem "1991"
      .AddItem "1992"
      .AddItem "1993"
      .AddItem "1994"
      .AddItem "1995"
      .AddItem "1996"
      .AddItem "1997"
      .AddItem "1998"
      .AddItem "1999"
      .AddItem "2000"
      .AddItem "2001"
      .AddItem "2002"
      .AddItem "2003"
      .AddItem "2004"
      .AddItem "2005"
      .AddItem "2006"
      .AddItem "2007"
      .AddItem "2008"
      .AddItem "2009"
      .AddItem "2010"
      .AddItem "2011"
      .AddItem "2012"
      .AddItem "2013"
      .AddItem "2014"
   End With
   
   'Reset Radio Button. Set it to False when form loads.
   radioyes.Value = False
   radiono.Value = False

End Sub

Step 8−ここで、[送信]ボタンにコードを追加します。送信ボタンをクリックすると、ユーザーはワークシートに値を追加できるはずです。

Private Sub btnsubmit_Click()
   Dim emptyRow As Long
  
   'Make Sheet1 active
   Sheet1.Activate
  
   'Determine emptyRow
   emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
  
   'Transfer information
   Cells(emptyRow, 1).Value = txtempid.Value
   Cells(emptyRow, 2).Value = txtfirstname.Value
   Cells(emptyRow, 3).Value = txtlastname.Value
   Cells(emptyRow, 4).Value = cmbdate.Value & "/" & cmbmonth.Value & "/" & cmbyear.Value
   Cells(emptyRow, 5).Value = txtemailid.Value
  
   If radioyes.Value = True Then
      Cells(emptyRow, 6).Value = "Yes"
   Else
      Cells(emptyRow, 6).Value = "No"
   End If
End Sub

Step 9 −ユーザーが[キャンセル]ボタンをクリックしたときにフォームを閉じるメソッドを追加します。

Private Sub btncancel_Click()
   Unload Me
End Sub

Step 10−「実行」ボタンをクリックしてフォームを実行します。フォームに値を入力し、[送信]ボタンをクリックします。次のスクリーンショットに示すように、値は自動的にワークシートに流れ込みます。