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

DIY エクセルVBA

こんにちは、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では使用することが多いと思います。無料で配布している「名簿管理ツール」にも使っているので参考にしていただければ幸いです。

⇒参考:【無料ダウンロード】エクセルVBAで『名簿作成』

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

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

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

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

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

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

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

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

Private Sub CommandButton1_Click()

【スペース】

End Sub

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

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

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

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

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

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

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

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

Private Sub Workbook_Open()
UserForm1.Show vbModeless
End Sub

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

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

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

ちなみにこれは無料配布している「FAX送信プログラム」でも使用しています。
⇒参考:【無料ダウンロード】誰でも簡単に使える『FAX送付状テンプレート』【エクセルVBA】【フリー】

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

空欄の場合にメッセージ

今回の入力フォームでは入力項目が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

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

メッセージが表示されるはずです。今回の作業は以上になります。

お疲れさまでした。

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

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

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

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

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

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

ボタンで簡単印刷

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

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

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

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