ExcelVBAで【ユーザフォーム】を利用したデータ登録サンプルを作ってみた
ExcelVBAで【ユーザフォーム】を利用したデータ登録サンプルを作ってみた
おはようございます。siroです。
ランサーズにてExcelの画面(ユーザフォーム)を利用したツール開発の案件が出ていたので、
サンプルを一旦作ってみました。
出来上がりイメージ
まずは、作ったツールを動画でご紹介します。
youtu.be
・画面で入力されていない項目があった場合は、エラーメッセージ表示
・画面で入力したデータが、新規登録ボタンでExcelに書き込まれる
・既にデータが登録されていた場合は、その一つ下の行にデータ登録する
上記3点を実現しています。
どうやって作る?
以下のような流れで作りました。
① ユーザフォームを新規作成し、部品 (ラベル、テキストボックス、ボタン etc...) を配置
② 新規登録ボタン、閉じるボタン押下時の処理をプログラミング
③ 簡単な動作テスト
ユーザフォーム新規登録方法
① VBEを 「Alt + F11」で開く
② プロジェクトエクスプローラーで右クリックし、挿入から「ユーザフォーム」を選択
ユーザフォームへの部品配置方法
① 表示タブのツールボックスを表示
② 配置したい部品 (ラベル、テキストボックス、ボタン etc...)を選択し、配置したい場所を選んで配置
部品のプロパティ設定
配置した部品は、デフォルトだと部品の名前が識別しにくいものになっているため、
最低限部品名をプロパティ値を変更して設定
※プロパティではほかにも文字サイズや、色、その他さまざまな設定変更が可能です
① 設定したい部品を選択する (ここではNoのラベルを選択しています)
② オブジェクト名を識別可能な値に変更 (ここではNoのラベルなので、「No_ + Lbl」としています。※末尾でラベルであることがわかるようにしています
※個人的には以下のようなコーディングルールを決めておくとよいと思います。
・ラベル :任意の値 + 「 _ 」 + Lbl
・テキストボックス :任意の値 + 「 _ 」 + Txt
・コンボボックス :任意の値 + 「 _ 」 + Cmb
※任意の値には、内容がわかるものを入れます
こうすることで、
Range("B6").value = No_Lbl.Value
のように、値を取得して利用することができます。
上記を利用し、テキストボックス、ラベル、ボタンを準備します。
ボタンのクリックイベントを書く
ボタンのクリックイベントを書く場合は、VBEにてユーザフォームを開き、
クリックイベントを書きたいボタンをダブルクリックします。
※ダブルクリックすることで、クリック用のメソッドが自動的に作られます。
クリック前
クリック後
この中でクリック時の具体的な処理を書いていきます。
※画像は既にソースが書いてありますが、クリック処理を新規に作る場合は、
内容が書いていない状態でクリック用のイベント処理だけできます。
実際のソースコード一覧
ソースコード一覧は下記となります。
'閉じるボタンクリック時の処理 Private Sub Close_Btn_Click() 'フォームを閉じる Unload NewRegist_Frm End Sub '新規登録ボタン押下時の処理 Private Sub regist_Btn_Click() Debug.Print "エラーチェック" 'エラーチェック If No_Txt.Value = "" Then MsgBox "Noを入力してください", vbExclamation No_Txt.SetFocus Exit Sub ElseIf Title_Txt.Value = "" Then MsgBox "タイトルを入力してください", vbExclamation Title_Txt.SetFocus Exit Sub ElseIf Address_Cmb.Value = "" Then MsgBox "宛先を選択してください", vbExclamation Address_Cmb.SetFocus Exit Sub ElseIf TextBody_Txt.Value = "" Then MsgBox "メール本文を入力してください", vbExclamation TextBody_Txt.SetFocus Exit Sub End If Call excelRegist(No_Txt.Value, Title_Txt.Value, Address_Cmb.Value, TextBody_Txt.Value) 'フォームを閉じる Unload NewRegist_Frm End Sub 'ユーザフォームオープン時の処理 Private Sub UserForm_Initialize() 'ドロップダウンリストに初期地設定 Address_Cmb.AddItem "XXXXXXXXXXXXXXX@gmail.com" Address_Cmb.AddItem "YYYYYYYYYYYYYYY@gmail.com" End Sub 'Excelにデータ登録 Sub excelRegist(strNo As String, strTitle As String, strAddress As String, strTextBody As String) '最終行の取得 Dim rowNo As Long Range("B1047586").Select '最終行を選択 Selection.End(xlUp).Select rowNo = ActiveCell.Row + 1 ActiveSheet.Range("B" & CStr(rowNo)).Value = strNo ActiveSheet.Range("C" & CStr(rowNo)).Value = strTitle ActiveSheet.Range("D" & CStr(rowNo)).Value = strAddress ActiveSheet.Range("E" & CStr(rowNo)).Value = strTextBody End Sub
エラー処理も分けた方が良かった気がしますが、こんなソースで実現できます。
ユーザフォームを作って試してみたいという方、ぜひ試してみてください!!
質問についてはコメントにてご連絡ください。
上記のような画面を使ったシステム開発などを依頼されたい方は、以下ランサーズからご依頼ください。
www.lancers.jp
ではではーノシ