検索
連載

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

プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、実用的なExcelアプリを作るために、フォームにテキストボックス、オプションボタン、リストボックスなどのコントロールを配置してボタン実行時のイベント処理をマクロで書く方法などについて【Windows 10、Excel 2016に対応】。

Share
Tweet
LINE
Hatena

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

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

コントロールをダブルクリックして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.

ページトップに戻る