【VBA】「開いたときに実行」と「msgbox」
こんにちは、Fujiya(@fujiya_xyz)です。
この記事では”デジタルDIY”という企画で、エクセルの「VBAプログラミングをやってみたい人向け」に、実用的な自動化ツールの作り方を説明しています。
そして、今回は前回作業『”コード記述編”』の続きとなっていますが、今までの作業がわかっていなくてもコードだけ確認することも出来ます。
【エクセル】vba初心者向け『入力フォーム』の作り方”コード記述編”
“デジタルDIY”VBA『オブジェクト作成編』の続きです。
2回に渡って自動化入力ツールを作ってきましたが、実はまだ最低限度の実用性も備えてはいません。
この記事では「エクセルを起動したときに自動で入力フォームが表示される機能」と「入力に空欄があった場合に警告メッセージが出る機能」を追加したいと思います。
この2つの機能は、他のフォームを作った場合でも活用できます。超重要な機能。
是非最後までお付き合いください。
【VBA入力フォーム作成】「開いたときに自動実行」と「msgbox」
今回の作業内容
自動でフォームを表示する
現段階ではフォームを表示する術が、編集画面(VBE)の実行ボタンしかありません。
そこでファイルを開いたときに自動で入力フォームを表示するようにします。
まず編集画面のプロジェクトウィンドウにある「This Workbook
」を開きます(下画像)。
右クリック⇒「コードの表示」を選択して、右側にコード記述画面を表示します。
コード入力画面上の左コンボボックスを「Workbook」にすると自動で右のコンボボックスが「Open」になり、コードが記述されます。
Private Sub Workbook_Open()
【スペース】
End Sub
これは”このワークブックが開かれた時”に動作するプログラムです。
そして、【スペース】部分に『UserForm1(オブジェクト名)を表示する』というコードUserForm1.Show
を入力します。
合わせると『このワークブックが開かれたときにUserForm1(オブジェクト名)を表示する』というプログラムになります。
まとめるとこんな感じ(以下)
Private Sub Workbook_Open()
UserForm1.Show
End Sub
コードを記述したら「保存」をして、一度ファイルを閉じ、もう一度開きましょう。
こんな感じでシートが表示されたと同時にフォームも表示されるはず(上画像)。
これはフォームで管理するVBAでは使用することが多いと思います。無料で配布している「名簿管理ツール」にも使っているので参考にしていただければ幸いです。
【無料ダウンロード】エクセルVBAで『名簿作成』
エクセルVBAで「名簿作成・管理」のプログラムを作りました。ビジネスや日常的にも使えるシンプルな作りです。
手動で入力フォームの表示をする
入力フォームの「閉じる」ボタンで消してしまった場合に、再度を表示させられるようにしていきたいと思います。
「開発タブ」を開き、「挿入」⇒「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送信ツール」でも使用しているので、参考程度に見ていただくとわかりやすいかもです。
【無料ダウンロード】誰でも簡単に使える『FAX送付状テンプレート』【エクセルVBA】【フリー】
エクセルVBAで「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関数を紹介した記事
【ExcelVBA】Msgbox関数を使って操作性アップ
エクセルVBA初心者向けに「Msgbox関数」の使い方を書いています。メッセージボックスのアイコンやボタン、改行などをサンプルコードを使って分かりやすく書きました。
今回の作業は以上になります。お疲れさまでした。
【VBA入力フォーム作成】「開いたときに自動実行」と「msgbox」|まとめ
今回の作業で【エクセルVBA】自動入力ツールは完成です。
超基礎なのでツールとしては物足りなさを感じるかもしれません・・・。しかし、作り方はの基礎は理解できたはず。
自動入力ツールの機能まとめ
- ファイル起動時に入力フォームが自動表示
- フォームを開いたままでシートを編集できる
- 入力フォームからセルへの入力
- 手動での入力フォームの表示
- 空欄があった場合のメッセージ
これを元にレベルアップさせることも可能です。具体的には「印刷機能」や「自動保存」が簡単です。
ボタンで簡単印刷
【VBAで印刷】エクセル作業をボタン1つで楽にするプログラム
VBAで印刷を自動化するプログラムの説明です。これが出来るようになると様々なツールに印刷機能を付けることが出来ます。作業効率も良いです。
保存し忘れを無くす「自動保存」
【エクセル】VBAで自動保存プログラムを作ってみる
エクセルVBAで自動保存プログラムの解説です。
機会があれば更なる機能を紹介していきたいと考えています。最後までお付き合いいただきありがとうございました。
前回までの入力フォーム作成記事