Excel操作で日が暮れないようにデータ削除処理とメニュー画面を作る&MsgBox関数の使い方Excelマクロ/VBAで始める業務自動化プログラミング入門(15)(1/3 ページ)

プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。応用編の3回目は、不要になったデータを見つけて自動的に削除するマクロの書き方を紹介。MsgBox関数の使い方も引数や戻り値の表とともに解説します【Windows 10、Excel 2016に対応】。

» 2016年10月24日 05時00分 公開
[薬師寺国安PROJECT KySS]

Excel操作で日が暮れないように

 プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説する本連載「Excelマクロ/VBAで始める業務自動化プログラミング入門」。前々回から応用編として「個人情報管理システム」を作り始めている。

 今回は「データ削除」と前々回で、少しだけ画像で紹介した「メニュー」の作り方を紹介する。「データ削除」フォームは「データ検索」フォームと併用しているため、「データ削除」フォームの作り方は省略する。作成方法については前回記事を参照してほしい。

 「データ検索」と「データ削除」フォームの違いは「削除」ボタンが表示されるか、されないかの1点だけだ。これから作成する「メニュー」画面で、「データ削除」をクリックしたときにのみ「削除」ボタンを表示させて、データの削除を可能にする。

 Excelでデータを管理する場合、当然不要になったデータは削除する。何万件ものデータの中から手作業で削除するデータを探していたのでは、日が暮れてしまう。そんな非効率的なExcelの使い方ではExcelに申し訳ない。

 不要になったデータについては、検索で該当するデータを見つけて、削除するマクロを書くことで、日常業務を効率化する。これがExcel本来の正しい使い方だ。

データ削除画面を作る

 「データ削除」フォームは前回作成しているので、再度そのデザイン画面だけ紹介しておく(図1)。

図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
リスト1 「削除」ボタンをクリックしたときの処理

 まず、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行目)。

MsgBox関数の使い方

 リスト1では、削除確認のメッセージの表示にMsgBox関数を使っている。MsgBoxの書式は下記の通りだ。主な引数のみ紹介している。

MsgBoxの書式

MsgBox({prompt},{buttons},{title})


 {prompt}は必須項目で、表示するメッセージを指定する。{buttons}は任意で、表示するボタンの種類やタイプを指定する(表1)。{title}は任意でメッセージボックスに表示するタイトルを指定する。

MsgBoxで表示するボタンの種類

表1 MsgBoxに指定する{buttons}の種類(主なもののみ紹介)
定数 説明
vbOKOnly 0 OKボタンを表示
vbOKCancel 1 OKとCancelボタンを表示
vbYesNo 4 「はい」と「いいえ」ボタンを表示
vbQuestion 32 問い合わせメッセージアイコンを表示
vbExclamation 48 警告メッセージアイコンを表示
vbInformation 64 情報メッセージアイコンを表示
参考「MsgBox Function - MSDN

 {buttons}の種類は「+」で連結して複数指定できる。ここでは「vbYesNo + vbExclamation」を指定しているため、警告メッセージアイコンが表示され、[はい]ボタンと[いいえ]ボタンの付いたメッセージボックスが表示される(図2参照)。

図2 表示されたメッセージボックス

MsgBoxの戻り値

 MsgBoxの戻り値は表2のようになる。

表2 MsgBoxの戻り値
定数 説明
vbOK 1 OK
vbCancel 2 キャンセル
vbAbort 3 中止
vbRetry 4 再試行
vbIgnore 5 無視
vbYes 6 はい
vbNo 7 いいえ
参考「MsgBox Function - MSDN

データ削除の実行結果

 「データ削除」を実行すると図3のようになる。

図3 「データ削除」を実行した画面

 以上で削除処理は終わりだ。オプションボタンから表示したい項目を選択し、リストボックスに表示された項目を選択して、テキストボックスに表示し、「実行」ボタンをクリックして、該当するデータをラベル内に表示するところまでは、前回の「データ検索」処理と全く同じであるため、前回を参照してほしい。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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