【VBA】「開いたときに実行」と「msgbox」

ExcelVBA

こんにちは、Fujiya(@fujiya_xyz)です。

この記事では”デジタルDIY”という企画で、エクセルの「VBAプログラミングをやってみたい人向け」に、実用的な自動化ツールの作り方を説明しています。

そして、今回は前回作業『”コード記述編”』の続きとなっていますが、今までの作業がわかっていなくてもコードだけ確認することも出来ます。

2回に渡って自動化入力ツールを作ってきましたが、実はまだ最低限度の実用性も備えてはいません。

この記事では「エクセルを起動したときに自動で入力フォームが表示される機能」と「入力に空欄があった場合に警告メッセージが出る機能」を追加したいと思います。

この2つの機能は、他のフォームを作った場合でも活用できます。超重要な機能。

是非最後までお付き合いください。

【VBA入力フォーム作成】「開いたときに自動実行」と「msgbox」

起動時に自動でフォームを表示

今回の作業内容

  1. 自動でフォームを表示する
  2. 手動で表示するボタンも作る
  3. フォームを開いたまま、表を操作する(vbModeless)
  4. 入力フォームが空欄の場合にメッセージボックスを表示する

自動でフォームを表示する

現段階ではフォームを表示する術が、編集画面(VBE)の実行ボタンしかありません。

そこでファイルを開いたときに自動で入力フォームを表示するようにします。

まず編集画面のプロジェクトウィンドウにある「This Workbook」を開きます(下画像)。

thisworkbookを開く

右クリック⇒「コードの表示」を選択して、右側にコード記述画面を表示します。

コード入力画面上の左コンボボックスを「Workbook」にすると自動で右のコンボボックスが「Open」になり、コードが記述されます。

Private Sub Workbook_Open()
【スペース】
End Sub

これは”このワークブックが開かれた時”に動作するプログラムです。

そして、【スペース】部分に『UserForm1(オブジェクト名)を表示する』というコードUserForm1.Showを入力します。

合わせると『このワークブックが開かれたときにUserForm1(オブジェクト名)を表示する』というプログラムになります。

まとめるとこんな感じ(以下)

Private Sub Workbook_Open()
UserForm1.Show
End Sub

コードを記述したら「保存」をして、一度ファイルを閉じ、もう一度開きましょう。

フォームの自動表示

こんな感じでシートが表示されたと同時にフォームも表示されるはず(上画像)。

これはフォームで管理するVBAでは使用することが多いと思います。無料で配布している「名簿管理ツール」にも使っているので参考にしていただければ幸いです。

手動で入力フォームの表示をする

入力フォームの「閉じる」ボタンで消してしまった場合に、再度を表示させられるようにしていきたいと思います。

「開発タブ」を開き、「挿入」⇒「ActiveXコントロール」にある「コマンドボタン」をクリックし、ボタンを作りましょう。(下画像)

ActiveXコントロールからのぼボタン挿入

オブジェクト編」と同じ要領でプロパティを設定していきます。

ボタンを右クリックし、「プロパティ」を選択。「キャプション」で表示するデータを「入力フォームの表示」とします(下画像)。

再表示のキャプション設定

次にシートにあるコマンドボタンを選択して右クリック、「コードを表示」を選択します。

Private Sub CommandButton1_Click()
【スペース】
End Sub

編集画面(VBE)で「コマンドボタン1」を押したとき動作するプログラムとして、上記のコードが表示されます。

【スペース】の部分にUserForm1.Showを入力します。

シートに戻り『デザインモード』を解除してから、ボタンをクリックしてみましょう。入力フォームが表示されるはず。

※開発タブにある『デザインモード』をクリックすることでオン・オフを変えられます。

なお、シートにボタンを設置してからの作業については『【エクセルVBA】シートにボタンを作成して作業を効率化する』でも紹介しています。こちらの方が詳しいので上の説明ではわかりづらいという人は参考にしてみてください。

フォームを開いたまま、表を操作する(vbModeless)

現状だと入力フォームが起動しているときは、シートやセルを操作できないです。

フォームを開いている状態でセルを操作できるようにするにはvbModelessというコードを入力します。

今回作成してきたコードにvbModelessを記述するだけ。

Private Sub Workbook_Open()
UserForm1.Show vbModeless
End Sub

こんな感じでUserForm1.Showの後ろに半角スペースを入れて記述。

※コマンドボタンのコードにも同じく記述してください。

これでフォームを開いている状態でもシートを編集できますね。

ちなみにこれは無料配布している「FAX送信ツール」でも使用しているので、参考程度に見ていただくとわかりやすいかもです。

入力フォームが空欄の場合にメッセージボックスを表示する

空欄の場合にメッセージ

今回の入力フォームでは入力項目が4つしかありませんので、入力し忘れは無いと思います。後々、必要になってくるプログラムですね。

どうやるか?というと、前回やった入力フォームの登録ボタンを押した際のプログラムにコードを追加します。

Private Sub 登録ボタン_Click()
'変数
最終セル = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1
【ここに追加します】
'入力の処理
Worksheets("Sheet1").Cells(最終セル, 1).Value = 氏名テキストボックス.Text
Worksheets("Sheet1").Cells(最終セル, 2).Value = ふりがなテキストボックス.Text
Worksheets("Sheet1").Cells(最終セル, 3).Value = 性別コンボボックス.Text
Worksheets("Sheet1").Cells(最終セル, 4).Value = 住所テキストボックス.Text
'登録した後、テキストボックスを空欄にする処理
氏名テキストボックス.Text = ""
ふりがなテキストボックス.Text = ""
性別コンボボックス.Text = ""
住所テキストボックス.Text = ""
End Sub

登録ボタンを押したときに、1番最初に行う動作なので”登録ボタンをクリック”の直後にコードを追加するわけです。

If 氏名テキストボックス.Text = "" Then
MsgBox "氏名が空欄です"
Exit Sub
End If

If 氏名テキストボックス.Text = "" Then~End IfこれはIF構文、IFステートメントなどと言われるもので『もし氏名テキストボックスが空欄だったら~する』というもので、名前は覚える必要はありませんが”決まりごと”。

また、MsgBox "氏名が空欄です"は表示するメッセージです、これも決まりごと。そして、Exit Subは”作業を中断する”みたいな感じ。

これをテキストボックスごとに作っていきます。

If 氏名テキストボックス.Text = "" Then
MsgBox "氏名が空欄です"
Exit Sub
End If
If ふりがなテキストボックス.Text = "" Then
MsgBox "ふりがなが空欄です"
Exit Sub
End If
If 性別コンボボックス.Text = "" Then
MsgBox "性別の選択がありません"
Exit Sub
End If
If 住所テキストボックス.Text = "" Then
MsgBox "住所が空欄です"
Exit Sub
End If

こんな感じです。複雑そうですがそうでもないでしょ?

まとめたのが以下。

Private Sub 登録ボタン_Click()
最終セル = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1
'空欄の場合のメッセージ
If 氏名テキストボックス.Text = "" Then
MsgBox "氏名が空欄です"
Exit Sub
End If
If ふりがなテキストボックス.Text = "" Then
MsgBox "ふりがなが空欄です"
Exit Sub
End If
If 性別コンボボックス.Text = "" Then
MsgBox "性別の選択がありません"
Exit Sub
End If
If 住所テキストボックス.Text = "" Then
MsgBox "住所が空欄です"
Exit Sub
End If
'入力の処理
Worksheets("Sheet1").Cells(最終セル, 1).Value = 氏名テキストボックス.Text
Worksheets("Sheet1").Cells(最終セル, 2).Value = ふりがなテキストボックス.Text
Worksheets("Sheet1").Cells(最終セル, 3).Value = 性別コンボボックス.Text
Worksheets("Sheet1").Cells(最終セル, 4).Value = 住所テキストボックス.Text
'登録した後、テキストボックスを空欄にする処理
氏名テキストボックス.Text = ""
ふりがなテキストボックス.Text = ""
性別コンボボックス.Text = ""
住所テキストボックス.Text = ""
End Sub

そして、実行します。
入力フォームにわざと空欄を作ってから、登録ボタンを押してみましょう。

メッセージが表示されるはずです。

実はメッセージは用途によってアイコンやボタンを変更することができます。といってもイメージが湧かないと思うのですが下のリンクで解説をしています。これは操作性にもつながって来るので習得をしておいた方が後々ラクですよ

Msgbox関数を紹介した記事

今回の作業は以上になります。お疲れさまでした。

【VBA入力フォーム作成】「開いたときに自動実行」と「msgbox」|まとめ

今回の作業で【エクセルVBA】自動入力ツールは完成です。

超基礎なのでツールとしては物足りなさを感じるかもしれません・・・。しかし、作り方はの基礎は理解できたはず。

自動入力ツールの機能まとめ

  • ファイル起動時に入力フォームが自動表示
  • フォームを開いたままでシートを編集できる
  • 入力フォームからセルへの入力
  • 手動での入力フォームの表示
  • 空欄があった場合のメッセージ

これを元にレベルアップさせることも可能です。具体的には「印刷機能」や「自動保存」が簡単です。

ボタンで簡単印刷

保存し忘れを無くす「自動保存」

機会があれば更なる機能を紹介していきたいと考えています。最後までお付き合いいただきありがとうございました。

前回までの入力フォーム作成記事

  1. 【excel】vba初心者向け『入力フォーム』の作り方”オブジェクト作成編”
  2. 【エクセル】vba初心者向け『入力フォーム』の作り方”コード記述編”