Excelに入力フォームを作成、コントロールを追加、表示、ボタンでイベント実行Excelマクロ/VBAで始める業務自動化プログラミング入門(12)(2/3 ページ)

» 2016年09月30日 05時00分 公開
[薬師寺国安PROJECT KySS]

コントロールの「イベント」に対応したマクロを書き、動かす

 ここからはマクロを書いてみよう。

コントロールをダブルクリックしてSubプロシージャを自動作成

 まず「登録」ボタンをダブルクリックすると、リスト1のようなSubプロシージャが自動的に作成される。

Private Sub 登録ボタン_Click()
  
End Sub
リスト1 「登録」ボタンをClickしたときのイベント

「登録」ボタンをClickしたときのマクロ

 このリスト1の中にコードを書いていく。コードはリスト2のようになる。

Option Explicit
 
Private sex As String
Private lastRow As Long
 
Private Sub 登録ボタン_Click()
  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 sex = "" Then
    MsgBox "性別を選択してください。"
    Exit Sub
  End If
 
  With Worksheets("Sheet1")
    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    .Cells(lastRow, 1).Value = 氏名テキストボックス.Text
    .Cells(lastRow, 2).Value = 住所テキストボックス.Text
    .Cells(lastRow, 3).Value = 電話テキストボックス.Text
    .Cells(lastRow, 4).Value = sex
  End With
 
  氏名テキストボックス.Text = ""
  住所テキストボックス.Text = ""
  電話テキストボックス.Text = ""
  男性オプションボタン.Value = False
  女性オプションボタン.Value = False
End Sub
 
Private Sub 男性オプションボタン_Change()
  If 男性オプションボタン.Value = True Then
    sex = "男性"
  End If
End Sub
 
Private Sub 女性オプションボタン_Change()
  If 女性オプションボタン.Value = True Then
    sex = "女性"
  End If
End Sub
リスト2 「氏名」「住所」「電話番号」「性別」をフォームからExcel表に追加してマクロ

 マクロの中身を解説しよう。まず、3〜4行目では、「性別」から選択された値を格納しておく文字列型変数「sex」とデータの入っている行の個数を格納するLong型変数「lastRow」を宣言している

 「登録ボタン_Click()」では、まず「氏名」「住所」「電話番号」にデータが入っていなかったら警告メッセージを表示する(7〜20行目)。

 文字列型変数sexに値が入ってない場合も、警告メッセージを表示してる(22〜25行目)。sexに入る値は、次に記述しているコード内で「男性」または「女性」の「オプションボタン」の値が変更されたときに取得するようにしている(42〜52行目)。

 27〜33行目では、全ての項目に無事値が入ると、Sheet1のワークシートに対してセルの上方向(xlUp)に向かってデータが入っているセルを検索し、そのセルの1つ下のセルにデータを追加していく処理を記述している。この場合、「氏名」の項目名の下のセルにデータを追加する。

 最初の行の1列目に「氏名テキストボックス」の値を入力する。lastRowにはデータの入っている行の個数が格納されているため、データの入っている行の1つ下の行から順次データを追加していく。

 次に、2列目の「住所」に「住所テキストボックス」の値を入力、3列目の「電話番号」に「電話番号テキストボックス」の値を入力する。最後に、4列目の「性別」に変数sexが格納している値を入力する。

 データを追加していくと、追加されたデータの位置まで上方向に向かって検索し、その1つ下にデータを追加していくので、順次データが追加されていくことになる。

入力フォームは実行後にクリアすることが大事

 Excelにデータを追加した後は、それぞれの入力ボックスを空にし、オプションボタンの選択も解除する。

 このように、入力フォームを持つアプリケーションの開発では、一度入力して実行した後は、次の入力のために入力内容をクリアしておくことが大事だ。忘れずに行おう。

実行結果

 このマクロを実行してフォームにデータを入力したのが図5、「登録」ボタンでExcelに追加したのが図6となる。データが追加される「A3:D:100」の範囲には、Excel 2016のメニューから「フォントのサイズ」を「14」に手動で設定している。

図5 フォームにデータを入力した
図6 「登録」ボタンでExcelにデータを追加した

 このマクロを実行してデータを追加していくには、あらかじめExcelの表に「氏名」「住所」「電話番号」「性別」といった項目名だけの表を作成しておく必要がある。

Excel上からフォームを起動させるShowメソッド

 このフォームをExcel上から起動させるには、次の手順を踏む。

 VBEの画面で、プロジェクト内の「VBAプロジェクト(Form1.xlsm)」を選択し、VBEメニューの[挿入]→[標準モジュール]と選択して、Module1を追加する。その中に、リスト3のマクロを追加する。Showメソッドでフォームを表示するだけの簡単なものだ。

Option Explicit
Sub 入力フォーム起動()
  UserForm1.Show
End Sub
リスト3 フォームを表示するマクロ

 次に、Excel上にボタンを配置して、名前に「入力フォーム起動」とでもして、「入力フォーム起動」マクロを関連付けると、図7のようになる。

図7  「入力フォーム起動」ボタンにマクロを関連付けた

 以上で、「テキストボックス」と「オプションボタン」を使用したフォームの例は終わりだ。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。