頭の体操! 条件分岐とループでデータ検索を実装できる?フラグの使い方の基本も:Excelマクロ/VBAで始める業務自動化プログラミング入門(14)(3/4 ページ)
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。前回から応用編として実用的なExcelアプリの作り方を解説しています。今回は、データ処理のキモとなる「検索」をマクロで実装してみましょう。頭の体操に打ってつけですよ【Windows 10、Excel 2016に対応】。
その他のコントロールのイベント処理とフラグの設定
「氏名オプションボタン」をクリックしたときの処理
次は「氏名オプションボタン」をクリックしたときの処理だ(リスト3)。
Private Sub 氏名オプションボタン_Click() 判定 = 1 検索住所テキストボックス.Text = "" 検索電話番号テキストボックス.Text = "" 一覧リストボックス.Clear 氏名ボタン.Enabled = True 住所ボタン.Enabled = False 電話番号ボタン.Enabled = False Dim i As Long lastRow = Worksheets("個人情報データ").Cells(Rows.Count, 2).End(xlUp).Row + 1 If lastRow <= 3 Then MsgBox "データがありません。" Exit Sub End If For i = 3 To lastRow 一覧リストボックス.AddItem Cells(i, 2) Next 件数ラベル.Caption = 一覧リストボックス.ListCount - 1 & "件" End Sub
どの「実行」ボタンをクリックしたかを判定するために、変数「判定」に1を代入しておく(2行目)。各検索用の入力ボックスを空にし、リストボックス内もクリアしておく(3〜5行目)。「氏名ボタン」の「実行」ボタンの使用を可能にする(6行目)。「住所ボタン」と「電話番号ボタン」の「実行」ボタンは使用を不可としておく(7〜8行目)。
「個人情報データ」シート2行目以降の行番号を変数「lastRow」に格納し(10行目)、シート3行目より小さかった場合、つまり項目名だけでデータがなかった場合は警告メッセ―ジを表示して処理を抜ける(11〜14行目)。
シート3行目から取得された行番号(lastRow)の分だけFor〜Next文でループ処理(繰り返し)を行い、「一覧リストボックス」にシート2列目の「氏名」の値を追加する。「一覧リストボックス」に「氏名の一覧が表示される(16〜18行目)。
件数ラベルのCaptionに「一覧リストボックス」内のデータ件数を表示する(19行目)。ListCountから-1としているのは「一覧リストボックス」の末尾に空白のデータが追加されるためだ(図7)。
「住所オプションボタン」をクリックしたときの処理
次は「住所オプションボタンをクリックしたときの処理だ(リスト4)。リスト3の「氏名オプションボタン」をクリックしたときとほとんど同じコードであるため、異なる部分のみ掲載する。
Private Sub 住所オプションボタン_Click() 判定 = 2 〜リスト3と同じ〜 氏名ボタン.Enabled = False 住所ボタン.Enabled = True 電話番号ボタン.Enabled = False 〜リスト3と同じ〜 End Sub
どの「実行」ボタンをクリックしたかを判定するために、変数「判定」に2を格納する。「住所ボタン」の「実行」ボタンの使用を可能にする。他の「実行」ボタンの使用は不可となる。
「電話オプションボタン」をクリックしたときの処理
次は「電話オプションボタン」をクリックしたときの処理だ(リスト5)。これもリスト3の「氏名オプションボタン」をクリックしたときとほとんど同じコードであるため、異なる部分のみ掲載する。
Private Sub 電話オプションボタン_Click() 判定 = 3 〜リスト3と同じ〜 氏名ボタン.Enabled = False 住所ボタン.Enabled = False 電話番号ボタン.Enabled = True 〜リスト3と同じ〜 End Sub
どの「実行」ボタンをクリックしたかを判定するために、変数「判定」に3を格納する。「電話番号ボタン」の「実行」ボタンの使用を可能にする。他の「実行」ボタンの使用は不可となる。
「氏名ボタン」の「実行」ボタンをクリックしたときの処理
次は、「氏名ボタン」の「実行」ボタンをクリックしたときの処理だ(リスト6)。
Private Sub 氏名ボタン_Click() Call 検索実行(検索氏名テキストボックス.Text) End Sub
引数に「検索氏名テキストボックス」の値を指定して、「検索実行」プロシージャを実行する。
「住所ボタン」の「実行」ボタンをクリックしたときの処理
次は、「住所ボタン」の「実行」ボタンをクリックしたときの処理だ(リスト7)。
Private Sub 住所ボタン_Click() Call 検索実行(検索住所テキストボックス.Text) End Sub
引数に「検索住所テキストボックス」の値を指定して、「検索実行」プロシージャを実行する。
「電話番号ボタン」の「実行」ボタンをクリックしたときの処理
次は、「電話番号ボタン」の「実行」ボタンをクリックしたときの処理だ(リスト8)。
Private Sub 電話番号ボタン_Click() Call 検索実行(検索電話番号テキストボックス.Text) End Sub
引数に「検索電話番号テキストボックス」の値を指定して、「検索実行」プロシージャを実行する。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Excelマクロ/VBAリファレンス用途別・キーワード別一覧超まとめ
- ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
Excelを通じて「ピボットテーブル」の基礎を学び、データ分析を実践するまでを習得する本連載。初回はピボットテーブルの基礎と、「どんなことができるのか」を解説する。 - どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう。