
Excel VBA ユーザーフォームで入力内容確認画面の作り方
仕事でVBAを使うことがあり、やりたいことはネットで調べていますが、VBA初心者の私が分かりづらかったものを、初心者でも分かるように説明したいと思います。
効率的なコードが書けていない可能性もありますので、予めご了承ください。
今回はユーザーフォームでテキストボックスに入力した内容の確認画面を表示する方法を紹介します。
これに関しては、ネットを検索してもあまり当てはまる記事が見当たらず、自己流のやり方のため正しいか分かりませんが、方法を探している方のお役に立てれば幸いです。
なお、前回の記事を流用した内容となっているため、必要に応じ確認いただければと思います。

ユーザーフォームを使用した入力フォームの作り方
完成イメージ
前回の記事でサンプルとして利用した請求書作成フォーマットを使用し、ユーザーフォーム入力後に入力内容の確認画面を表示する仕様にしてみたいと思います。
①「入力開始」ボタンをクリック。

②フォームが起動します。

③フォームに情報を入力し登録をクリック。

④確認画面が表示されるため、内容に問題がなければ登録。

⑤フォームに入力した情報が反映。
※単価・金額は数式入れてます。

確認画面の作り方
確認画面の作り方ですが、確認画面用のユーザーフォームにラベルを設置し、そのラベルに入力内容を反映しています(もっと適切な方法があったらすいません)。
ここでは確認画面用のユーザーフォームの作り方を説明していきます。
入力用画面のフォームの作り方は前回の記事をご覧ください。
①VBEを開き、挿入→ユーザーフォームを選択。

②ユーザーフォームが挿入されます。台紙みたいなものと思ってください。

③サイズを入力用画面と同じサイズにします。
サイズはプロパティのHeightとWidthで設定が可能です。

④表示→ツールボックスを選択。

⑤ツールボックスが表示されます。

⑥ツールボックスからラベルを選択し配置。
位置とサイズは入力用画面の項目と同じにします。位置はプロパティのTopとLeftで設定が可能です。

⑦項目名を変更します。
項目名はプロパティのcaptionで、「Label〇」の部分を変更することで、任意の項目名へ変更が可能です。

⑧上記を繰り返し、入力用画面と同じ項目を作成します。

⑨入力内容を反映するためのラベルを配置。

⑩こちらも入力用画面と同じ項目分だけ作成します。

⑪ツールボックスからコマンドボタンを選択。

⑫キャンセルボタンと登録ボタンを作成。

⑬フォーム名を任意の名前に変更し完成です。
フォーム名はプロパティのCaptionで変更が可能です。

これでUserForm1は入力用画面、UserForm2は確認用画面の2つのフォームが完成した状態になります。
・UserForm1(入力用画面)

・UserForm2(確認用画面)

サンプルコード
まずはコード全文です。解説は後述します。
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub CommandButton2_Click()
If TextBox1 = "" Then
MsgBox "取引先名が入力されていません。"
Exit Sub
End If
If TextBox2 = "" Then
MsgBox "郵便番号が入力されていません。"
Exit Sub
End If
If TextBox3 = "" Then
MsgBox "住所が入力されていません。"
Exit Sub
End If
If TextBox4 = "" Then
MsgBox "商品が入力されていません。"
Exit Sub
End If
If TextBox14 = "" Then
MsgBox "数量が入力されていません。"
Exit Sub
End If
With UserForm2
.Label14.Caption = TextBox1.Text
.Label15.Caption = TextBox2.Text
.Label16.Caption = TextBox3.Text
.Label17.Caption = TextBox4.Text
.Label18.Caption = TextBox5.Text
.Label19.Caption = TextBox6.Text
.Label20.Caption = TextBox7.Text
.Label21.Caption = TextBox8.Text
.Label22.Caption = TextBox9.Text
.Label23.Caption = TextBox10.Text
.Label24.Caption = TextBox11.Text
.Label25.Caption = TextBox12.Text
.Label26.Caption = TextBox13.Text
.Label27.Caption = TextBox14.Text
.Label28.Caption = TextBox15.Text
.Label29.Caption = TextBox16.Text
.Label30.Caption = TextBox17.Text
.Label31.Caption = TextBox18.Text
.Label32.Caption = TextBox19.Text
.Label33.Caption = TextBox20.Text
.Label34.Caption = TextBox21.Text
.Label35.Caption = TextBox22.Text
.Label36.Caption = TextBox23.Text
End With
UserForm2.Show
End Sub
Private Sub CommandButton1_Click()
Unload Me
Unload UserForm1
End Sub
Private Sub CommandButton2_Click()
With Sheets("請求書")
.Range("A5").Value = UserForm1.TextBox1.Text & " 御中"
.Range("A6").Value = " 〒 " & UserForm1.TextBox2.Text
.Range("A7").Value = UserForm1.TextBox3.Text
.Range("B16").Value = UserForm1.TextBox4.Text
.Range("B17").Value = UserForm1.TextBox5.Text
.Range("B18").Value = UserForm1.TextBox6.Text
.Range("B19").Value = UserForm1.TextBox7.Text
.Range("B20").Value = UserForm1.TextBox8.Text
.Range("B21").Value = UserForm1.TextBox9.Text
.Range("B22").Value = UserForm1.TextBox10.Text
.Range("B23").Value = UserForm1.TextBox11.Text
.Range("B24").Value = UserForm1.TextBox12.Text
.Range("B25").Value = UserForm1.TextBox13.Text
.Range("H16").Value = UserForm1.TextBox14.Text
.Range("H17").Value = UserForm1.TextBox15.Text
.Range("H18").Value = UserForm1.TextBox16.Text
.Range("H19").Value = UserForm1.TextBox17.Text
.Range("H20").Value = UserForm1.TextBox18.Text
.Range("H21").Value = UserForm1.TextBox19.Text
.Range("H22").Value = UserForm1.TextBox20.Text
.Range("H23").Value = UserForm1.TextBox21.Text
.Range("H24").Value = UserForm1.TextBox22.Text
.Range("H25").Value = UserForm1.TextBox23.Text
End With
Unload Me
Unload UserForm1
End Sub
Sub 作成()
UserForm1.Show
End Sub
コード解説
コード内にコメントで解説していきます。
'キャンセルボタンを押した時にフォームを閉じる
Private Sub CommandButton1_Click()
Unload Me
End Sub
'以下登録ボタンクリック時の挙動
Private Sub CommandButton2_Click()
'空欄チェックとして、取引先名・郵便番号・住所・商品1の商品名と数量を必須項目として、いずれかが空欄だった場合、処理を終了
If TextBox1 = "" Then
MsgBox "取引先名が入力されていません。"
Exit Sub
End If
If TextBox2 = "" Then
MsgBox "郵便番号が入力されていません。"
Exit Sub
End If
If TextBox3 = "" Then
MsgBox "住所が入力されていません。"
Exit Sub
End If
If TextBox4 = "" Then
MsgBox "商品が入力されていません。"
Exit Sub
End If
If TextBox14 = "" Then
MsgBox "数量が入力されていません。"
Exit Sub
End If
'確認用画面に引き渡す値をセット
With UserForm2
.Label14.Caption = TextBox1.Text '取引先名
.Label15.Caption = TextBox2.Text '郵便番号
.Label16.Caption = TextBox3.Text '住所
'商品名1~10
.Label17.Caption = TextBox4.Text
.Label18.Caption = TextBox5.Text
.Label19.Caption = TextBox6.Text
.Label20.Caption = TextBox7.Text
.Label21.Caption = TextBox8.Text
.Label22.Caption = TextBox9.Text
.Label23.Caption = TextBox10.Text
.Label24.Caption = TextBox11.Text
.Label25.Caption = TextBox12.Text
.Label26.Caption = TextBox13.Text
'数量1~10
.Label27.Caption = TextBox14.Text
.Label28.Caption = TextBox15.Text
.Label29.Caption = TextBox16.Text
.Label30.Caption = TextBox17.Text
.Label31.Caption = TextBox18.Text
.Label32.Caption = TextBox19.Text
.Label33.Caption = TextBox20.Text
.Label34.Caption = TextBox21.Text
.Label35.Caption = TextBox22.Text
.Label36.Caption = TextBox23.Text
End With
'確認用画面を表示
UserForm2.Show
End Sub
'キャンセルボタンを押した時にフォームを閉じる(UserForm1も後ろで開いたままのため閉じる)
Private Sub CommandButton1_Click()
Unload Me
Unload UserForm1
End Sub
'以下登録ボタンクリック時の挙動
Private Sub CommandButton2_Click()
'UserForm1の各テキストボックスからフォーマットへ転記
With Sheets("請求書")
.Range("A5").Value = UserForm1.TextBox1.Text & " 御中" '取引先名の後ろに「御中」を追加
.Range("A6").Value = " 〒 " & UserForm1.TextBox2.Text '郵便番号の頭に「〒」を追加
.Range("A7").Value = UserForm1.TextBox3.Text '住所
'商品名1~10
.Range("B16").Value = UserForm1.TextBox4.Text
.Range("B17").Value = UserForm1.TextBox5.Text
.Range("B18").Value = UserForm1.TextBox6.Text
.Range("B19").Value = UserForm1.TextBox7.Text
.Range("B20").Value = UserForm1.TextBox8.Text
.Range("B21").Value = UserForm1.TextBox9.Text
.Range("B22").Value = UserForm1.TextBox10.Text
.Range("B23").Value = UserForm1.TextBox11.Text
.Range("B24").Value = UserForm1.TextBox12.Text
.Range("B25").Value = UserForm1.TextBox13.Text
'数量1~10
.Range("H16").Value = UserForm1.TextBox14.Text
.Range("H17").Value = UserForm1.TextBox15.Text
.Range("H18").Value = UserForm1.TextBox16.Text
.Range("H19").Value = UserForm1.TextBox17.Text
.Range("H20").Value = UserForm1.TextBox18.Text
.Range("H21").Value = UserForm1.TextBox19.Text
.Range("H22").Value = UserForm1.TextBox20.Text
.Range("H23").Value = UserForm1.TextBox21.Text
.Range("H24").Value = UserForm1.TextBox22.Text
.Range("H25").Value = UserForm1.TextBox23.Text
End With
'フォーム閉じる(UserForm1も後ろで開いたままのため閉じる)
Unload Me
Unload UserForm1
End Sub
UserForm1で入力した値をUserForm2のラベルに引き渡し、入力した内容を表示し、登録ボタンが押されたら、UserForm1の値をエクセルフォーマットに転記するという流れです。
ちなみに、UserForm1で登録ボタンを押した際、UserForm1を非表示(Unload)にすると、UserForm2には表示されますが、エクセルフォーマットにはブランクで転記されてしまうため、UserForm1も表示したままとしています。
最後にフォームを呼び出すコードを、エクセルのシート上に設置したボタンクリックで実行するようにすれば完成です。
Sub 作成()
UserForm1.Show
End Sub
以上、ユーザーフォームで入力内容の確認画面の作り方でした。
フォームを作るのが少し手間ですが、確認画面が表示された方が実務的ですし、ミスも減らすことができそうですよね。
もっと実用的な方法があるのかもしれませんが、これでイイという方は活用いただければ幸いです。

ユーザーフォームで入力内容確認画面の作り方

ユーザーフォームを使用した入力フォームの作り方

週ごとに縦に並んだ表を横並びにする方法 | Find&Set

セルに入力された日付を取得し自動でシートとファイルを作る方法

検索窓にキーワードを入力しEnterキーで検索するフォームの作り方 | Intersect

ブックを開いた時のウィンドウサイズを指定する方法 | workbook_open

新規ブックを作成しマクロが登録されたボタンを設置する方法 | OnAction

複数のワークシートをまとめて表示・非表示にする方法 | Visible Not.Visible

セル位置が変わっても特定の範囲を選択する方法 | Find&Address

電話番号からハイフンを削除し0から表示させる方法 | Evaluate&Replace

ダイアログボックスからファイルを選択して開く | GetOpenFilename