Excelに入力フォームを作成、コントロールを追加、表示、ボタンでイベント実行:Excelマクロ/VBAで始める業務自動化プログラミング入門(12)(2/3 ページ)
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、実用的なExcelアプリを作るために、フォームにテキストボックス、オプションボタン、リストボックスなどのコントロールを配置してボタン実行時のイベント処理をマクロで書く方法などについて【Windows 10、Excel 2016に対応】。
コントロールの「イベント」に対応したマクロを書き、動かす
ここからはマクロを書いてみよう。
コントロールをダブルクリックしてSubプロシージャを自動作成
まず「登録」ボタンをダブルクリックすると、リスト1のようなSubプロシージャが自動的に作成される。
Private Sub 登録ボタン_Click() End Sub
「登録」ボタンを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
マクロの中身を解説しよう。まず、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」に手動で設定している。
このマクロを実行してデータを追加していくには、あらかじめExcelの表に「氏名」「住所」「電話番号」「性別」といった項目名だけの表を作成しておく必要がある。
Excel上からフォームを起動させるShowメソッド
このフォームをExcel上から起動させるには、次の手順を踏む。
VBEの画面で、プロジェクト内の「VBAプロジェクト(Form1.xlsm)」を選択し、VBEメニューの[挿入]→[標準モジュール]と選択して、Module1を追加する。その中に、リスト3のマクロを追加する。Showメソッドでフォームを表示するだけの簡単なものだ。
Option Explicit Sub 入力フォーム起動() UserForm1.Show End Sub
次に、Excel上にボタンを配置して、名前に「入力フォーム起動」とでもして、「入力フォーム起動」マクロを関連付けると、図7のようになる。
以上で、「テキストボックス」と「オプションボタン」を使用したフォームの例は終わりだ。
関連記事
- Excelマクロ/VBAリファレンス用途別・キーワード別一覧超まとめ
- ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
Excelを通じて「ピボットテーブル」の基礎を学び、データ分析を実践するまでを習得する本連載。初回はピボットテーブルの基礎と、「どんなことができるのか」を解説する。 - どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう。
Copyright © ITmedia, Inc. All Rights Reserved.