プログラミング初心者を対象に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.