連載
» 2016年10月17日 05時00分 公開

頭の体操! 条件分岐とループでデータ検索を実装できる?フラグの使い方の基本もExcelマクロ/VBAで始める業務自動化プログラミング入門(14)(3/4 ページ)

[薬師寺国安,PROJECT KySS]

その他のコントロールのイベント処理とフラグの設定

「氏名オプションボタン」をクリックしたときの処理

 次は「氏名オプションボタン」をクリックしたときの処理だ(リスト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
リスト3 「氏名オプションボタン」をクリックしたときの処理

 どの「実行」ボタンをクリックしたかを判定するために、変数「判定」に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)。

図7 「一覧リストボックス」の末尾に空のデータが1件追加されている

「住所オプションボタン」をクリックしたときの処理

 次は「住所オプションボタンをクリックしたときの処理だ(リスト4)。リスト3の「氏名オプションボタン」をクリックしたときとほとんど同じコードであるため、異なる部分のみ掲載する。

Private Sub 住所オプションボタン_Click()
   判定 = 2
〜リスト3と同じ〜
    氏名ボタン.Enabled = False
    住所ボタン.Enabled = True
    電話番号ボタン.Enabled = False
〜リスト3と同じ〜
End Sub
リスト4 「住所オプションボタン」をクリックしたときの処理

 どの「実行」ボタンをクリックしたかを判定するために、変数「判定」に2を格納する。「住所ボタン」の「実行」ボタンの使用を可能にする。他の「実行」ボタンの使用は不可となる。

「電話オプションボタン」をクリックしたときの処理

 次は「電話オプションボタン」をクリックしたときの処理だ(リスト5)。これもリスト3の「氏名オプションボタン」をクリックしたときとほとんど同じコードであるため、異なる部分のみ掲載する。

Private Sub 電話オプションボタン_Click()
   判定 = 3
〜リスト3と同じ〜
    氏名ボタン.Enabled = False
    住所ボタン.Enabled = False
    電話番号ボタン.Enabled = True
〜リスト3と同じ〜
End Sub
リスト5 「電話オプションボタン」をクリックしたときの処理

 どの「実行」ボタンをクリックしたかを判定するために、変数「判定」に3を格納する。「電話番号ボタン」の「実行」ボタンの使用を可能にする。他の「実行」ボタンの使用は不可となる。

「氏名ボタン」の「実行」ボタンをクリックしたときの処理

 次は、「氏名ボタン」の「実行」ボタンをクリックしたときの処理だ(リスト6)。

Private Sub 氏名ボタン_Click()
   Call 検索実行(検索氏名テキストボックス.Text)
End Sub
リスト6 氏名ボタン」の「実行」ボタンをクリックしたときの処理

 引数に「検索氏名テキストボックス」の値を指定して、「検索実行」プロシージャを実行する。

「住所ボタン」の「実行」ボタンをクリックしたときの処理

 次は、「住所ボタン」の「実行」ボタンをクリックしたときの処理だ(リスト7)。

Private Sub 住所ボタン_Click()
  Call 検索実行(検索住所テキストボックス.Text)
End Sub
リスト7 「住所ボタン」の「実行」ボタンをクリックしたときの処理

 引数に「検索住所テキストボックス」の値を指定して、「検索実行」プロシージャを実行する。

「電話番号ボタン」の「実行」ボタンをクリックしたときの処理

 次は、「電話番号ボタン」の「実行」ボタンをクリックしたときの処理だ(リスト8)。

Private Sub 電話番号ボタン_Click()
  Call 検索実行(検索電話番号テキストボックス.Text)
End Sub
リスト8 「電話番号ボタン」の「実行」ボタンをクリックしたときの処理

 引数に「検索電話番号テキストボックス」の値を指定して、「検索実行」プロシージャを実行する。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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