プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。応用編の3回目は、不要になったデータを見つけて自動的に削除するマクロの書き方を紹介。MsgBox関数の使い方も引数や戻り値の表とともに解説します【Windows 10、Excel 2016に対応】。
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説する本連載「Excelマクロ/VBAで始める業務自動化プログラミング入門」。前々回から応用編として「個人情報管理システム」を作り始めている。
今回は「データ削除」と前々回で、少しだけ画像で紹介した「メニュー」の作り方を紹介する。「データ削除」フォームは「データ検索」フォームと併用しているため、「データ削除」フォームの作り方は省略する。作成方法については前回記事を参照してほしい。
「データ検索」と「データ削除」フォームの違いは「削除」ボタンが表示されるか、されないかの1点だけだ。これから作成する「メニュー」画面で、「データ削除」をクリックしたときにのみ「削除」ボタンを表示させて、データの削除を可能にする。
Excelでデータを管理する場合、当然不要になったデータは削除する。何万件ものデータの中から手作業で削除するデータを探していたのでは、日が暮れてしまう。そんな非効率的なExcelの使い方ではExcelに申し訳ない。
不要になったデータについては、検索で該当するデータを見つけて、削除するマクロを書くことで、日常業務を効率化する。これがExcel本来の正しい使い方だ。
「データ削除」フォームは前回作成しているので、再度そのデザイン画面だけ紹介しておく(図1)。
「データ削除」と前回の「データ検索」フォームは共用しているので、フォーム画面の作成方法や、配置するコントロールの種類、「オブジェクト名」については前回の「各コントロールの配置とプロパティの設定」を参照してほしい。
プログラムコードについても、UserForm2の「データ検索」で使用したコードと同じだ。異なる点は、「データ削除」フォームを選択した場合、「削除」ボタンが表示されること。ここでは、この「削除」ボタンをクリックした場合のコードのみ紹介する(リスト1)。その他のコードについては、前回を参照してほしい。
Private Sub 削除ボタン_Click()
  If IDラベル.Caption = "" Then
    MsgBox ("削除対象が指定されておりません。")
    Exit Sub
  End If
 
  Dim 削除確認 As Integer
  削除確認 = MsgBox("削除しますか?", vbYesNo + vbExclamation, "削除確認")
  If 削除確認 = vbYes Then
    Worksheets("個人情報データ").Select
    Dim 行番号 As Integer
    行番号 = ActiveCell.Row
 
    Range(Cells(行番号, 1), Cells(行番号, 8)).Delete
    MsgBox "削除しました。"
 
    IDラベル.Caption = ""
    氏名ラベル.Caption = ""
    性別ラベル.Caption = ""
    生年月日ラベル.Caption = ""
    郵便番号ラベル.Caption = ""
    住所ラベル.Caption = ""
    電話番号ラベル.Caption = ""
    メールラベル.Caption = ""
    
    検索氏名テキストボックス.Text = ""
    検索住所テキストボックス.Text = ""
    検索電話番号テキストボックス.Text = ""
    
    氏名ボタン.Enabled = False
    住所ボタン.Enabled = False
    電話番号ボタン.Enabled = False
    
    氏名オプションボタン.Value = False
    住所オプションボタン.Value = False
    電話オプションボタン.Value = False
    
    If 判定 = 1 Then
      Call 氏名オプションボタン_Click 
    End If
    
    If 判定 = 2 Then
      Call 住所オプションボタン_Click
    End If
    
    If 判定 = 3 Then
      Call 電話オプションボタン_Click
    End If
  Else
    MsgBox "削除中止しました。"
    Exit Sub
  End If
End Sub
まず、IDラベル内にデータが表示されていない場合は、削除対象のデータが選択されていないものと見なして、メッセージを表示し処理を抜ける(2〜4行目)。
削除確認のメッセージボックスを表示した結果の値を格納するInteger型の変数「削除確認」を宣言する(7行目)。MsgBoxの戻り値を受け取り、値が「vbYes」(はい)であった場合は、削除を実行する処理になる(9行目)。MsgBoxの使い方については、まとめて後述する。
「個人情報データ」シートを表示し(10行目)、Integer型の変数「行番号」を宣言する(11行目)。変数「行番号」にアクティブな行を格納する(12行目)。
Deleteメソッドでアクティブな行(行番号)である、1列目から8列目までのデータを削除し、「削除しました。」のメッセージを表示する(14〜15行目)。
詳細データを表示していた各ラベルの中を空にする(17〜24行目)。また、各検索用のテキストボックスの中も空にする(26〜28行目)。「実行」ボタンを全て使用不可とする(30〜32行目)。各オプションボタンの選択も全て解除する(34〜36行目)。
新しく削除を実行する場合、変数「判定」で処理を分岐する。「判定」変数が1の場合は「氏名オプションボタン_Click」プロシージャを、2の場合は「住所オプションボタン_Click」プロシージャを、3の場合は「電話オプションボタン_Click」プロシージャを実行する(38〜48行目)。
削除確認で「いいえ」を選択した場合は、「削除中止しました。」と表示する(49〜50行目)。
リスト1では、削除確認のメッセージの表示にMsgBox関数を使っている。MsgBoxの書式は下記の通りだ。主な引数のみ紹介している。
MsgBox({prompt},{buttons},{title})
{prompt}は必須項目で、表示するメッセージを指定する。{buttons}は任意で、表示するボタンの種類やタイプを指定する(表1)。{title}は任意でメッセージボックスに表示するタイトルを指定する。
| 定数 | 値 | 説明 | 
|---|---|---|
| vbOKOnly | 0 | OKボタンを表示 | 
| vbOKCancel | 1 | OKとCancelボタンを表示 | 
| vbYesNo | 4 | 「はい」と「いいえ」ボタンを表示 | 
| vbQuestion | 32 | 問い合わせメッセージアイコンを表示 | 
| vbExclamation | 48 | 警告メッセージアイコンを表示 | 
| vbInformation | 64 | 情報メッセージアイコンを表示 | 
| 参考「MsgBox Function - MSDN」 | ||
{buttons}の種類は「+」で連結して複数指定できる。ここでは「vbYesNo + vbExclamation」を指定しているため、警告メッセージアイコンが表示され、[はい]ボタンと[いいえ]ボタンの付いたメッセージボックスが表示される(図2参照)。
MsgBoxの戻り値は表2のようになる。
| 定数 | 値 | 説明 | 
|---|---|---|
| vbOK | 1 | OK | 
| vbCancel | 2 | キャンセル | 
| vbAbort | 3 | 中止 | 
| vbRetry | 4 | 再試行 | 
| vbIgnore | 5 | 無視 | 
| vbYes | 6 | はい | 
| vbNo | 7 | いいえ | 
| 参考「MsgBox Function - MSDN」 | ||
「データ削除」を実行すると図3のようになる。
以上で削除処理は終わりだ。オプションボタンから表示したい項目を選択し、リストボックスに表示された項目を選択して、テキストボックスに表示し、「実行」ボタンをクリックして、該当するデータをラベル内に表示するところまでは、前回の「データ検索」処理と全く同じであるため、前回を参照してほしい。
 ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとはCopyright © ITmedia, Inc. All Rights Reserved.