EnjomonWeb

Excel VBAの画像
2024/12/22

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

仕事でVBAを使うことがあり、やりたいことはネットで調べていますが、VBA初心者の私が分かりづらかったものを、初心者でも分かるように説明したいと思います。

効率的なコードが書けていない可能性もありますので、予めご了承ください。

今回はユーザーフォームを使用した入力フォームの作り方を紹介します。

とてもシンプルなフォームを紹介していますので、ユーザーフォームの入門として参考にしていただければ嬉しいです。

使用ケース

データ入力するフォーマットが複雑だと、入力箇所を間違ってしまったり、誤って数式を消してしまったりすることがありませんか?特に特定多数の人が使用するファイルだとなおさらですよね。

そういったことを防ぐ方法の一つとして、フォーマットへ直接入力するのではなく、ユーザーフォームを使用し、入力フォームで入力する方法があります。

今回は例として、以下のような請求書を作成するフォーマットがあるとして、取引先名や住所、商品名など、可変部分をフォームで入力するようにしてみたいと思います。

完成イメージ

①「入力開始」ボタンをクリック。

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

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

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

ブックオープンと同時にフォームを起動することもできますが、今回は分かりやすさを優先し、ボタンクリックでフォームが起動する仕様としました。

ユーザーフォームの作り方

まずはユーザーフォームの作り方を解説したいと思います。

①VBEを開き、挿入→ユーザーフォームを選択。

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

③ドラッグしながらサイズを調整します。後からでも変更は可能です。

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

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

⑥項目名を作成するため、ツールボックスからラベルを選択。

⑦ドラッグしながら任意の位置に配置します。

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

ラベルのサイズやフォントサイズもプロパティで調整しますが、今回は割愛させていただきます。

⑧値を入力するボックスを作成するため、ツールボックスからテキストボックスを選択。

⑨ドラッグしながら任意の位置に配置します。

⑩上記を繰り返し、必要な項目を全て作成します。

⑪キャンセルボタンと登録ボタンを作成するため、ツールボックスからコマンドボタンを選択。

⑫ドラッグしながら任意の位置に配置します。ボタン名はcaptionで変更が可能です。

⑬登録ボタンを作成し、フォームの側は完成です。

コードの書き方

フォームが完成したら、次にコマンドボタンを押した時の挙動をコードで書いていきます。

コードはプロジェクトの「コードを表示」をクリック、もしくは挙動を登録したいコマンドボタンをダブルクリックすると、コードウィンドウが開きます。

「コードを表示」から入ると設置したコマンドボタン分のSubが表示されない時があるため、コマンドボタンから入るといいかもしれません。

①「コードを表示」クリック、もしくは登録ボタンをダブルクリック

②コードが表示されます。

ここでは「CommandButton1_Click」がキャンセルボタン、「CommandButton2_Click」が登録ボタンを押した際の挙動になります。

サンプルコード

ユーザーフォーム


Private Sub CommandButton1_Click()
    Unload UserForm1
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 TextBox5 = "" Then
    MsgBox "数量が入力されていません。"
  Exit Sub
End If


With Sheets("請求書")
	.Range("A5").Value = TextBox1.Text & " 御中"
	.Range("A6").Value = " 〒 " & TextBox2.Text
	.Range("A7").Value = TextBox3.Text

	.Range("B16").Value = TextBox4.Text
	.Range("B17").Value = TextBox5.Text
	.Range("B18").Value = TextBox6.Text
	.Range("B19").Value = TextBox7.Text
	.Range("B20").Value = TextBox8.Text
	.Range("B21").Value = TextBox9.Text
	.Range("B22").Value = TextBox10.Text
	.Range("B23").Value = TextBox11.Text
	.Range("B24").Value = TextBox12.Text
	.Range("B25").Value = TextBox13.Text

	.Range("H16").Value = TextBox14.Text
	.Range("H17").Value = TextBox15.Text
	.Range("H18").Value = TextBox16.Text
	.Range("H19").Value = TextBox17.Text
	.Range("H20").Value = TextBox18.Text
	.Range("H21").Value = TextBox19.Text
	.Range("H22").Value = TextBox20.Text
	.Range("H23").Value = TextBox21.Text
	.Range("H24").Value = TextBox22.Text
	.Range("H25").Value = TextBox23.Text
End With

For i = 1 To 23
	UserForm1.Controls("Textbox" & i).Value = ""
Next i

Unload UserForm1

End Sub

標準モジュール

Sub 作成()
    UserForm1.Show
End Sub

コード解説

キャンセルボタンの挙動

まずはキャンセルボタンを押した場合の挙動です。

「Unload UserForm1」でフォームを閉じます。


Private Sub CommandButton1_Click()
    Unload UserForm1
End Sub

空欄チェック

続いて登録ボタンを押した場合の挙動です。まずは空欄チェックです。

Ifを使い、指定したテキストボックスが空欄の状態だった場合、メッセージボックスを表示し、Exit Subで処理を終了させています。

今回は取引先名・郵便番号・住所・商品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 TextBox5 = "" Then
    MsgBox "数量が入力されていません。"
  Exit Sub
End If


テキストボックスからフォーマットへ転記

テキストボックスに入力された内容をエクセルのフォーマットへ転記していきます。

Withステートメントを使い入力を簡易化しています。

取引先名には末尾に「␣御中「、郵便番号には先頭に「〒」を自動で追加するようにしています。後は入力内容をそのまま転記しています。


With Sheets("請求書")
	.Range("A5").Value = TextBox1.Text & " 御中"
	.Range("A6").Value = " 〒 " & TextBox2.Text
	.Range("A7").Value = TextBox3.Text

	.Range("B16").Value = TextBox4.Text
	.Range("B17").Value = TextBox5.Text
	.Range("B18").Value = TextBox6.Text
	.Range("B19").Value = TextBox7.Text
	.Range("B20").Value = TextBox8.Text
	.Range("B21").Value = TextBox9.Text
	.Range("B22").Value = TextBox10.Text
	.Range("B23").Value = TextBox11.Text
	.Range("B24").Value = TextBox12.Text
	.Range("B25").Value = TextBox13.Text

	.Range("H16").Value = TextBox14.Text
	.Range("H17").Value = TextBox15.Text
	.Range("H18").Value = TextBox16.Text
	.Range("H19").Value = TextBox17.Text
	.Range("H20").Value = TextBox18.Text
	.Range("H21").Value = TextBox19.Text
	.Range("H22").Value = TextBox20.Text
	.Range("H23").Value = TextBox21.Text
	.Range("H24").Value = TextBox22.Text
	.Range("H25").Value = TextBox23.Text
End With

フォーム入力内容クリア

フォームに入力された内容をクリアします。

For文を使用し、Textbox1~23を「""」(空欄)にしています。


For i = 1 To 23
	UserForm1.Controls("Textbox" & i).Value = ""
Next i

フォームを閉じる

フォームを閉じて終了です。


Unload UserForm1

標準モジュール

最後にフォームを呼び出すコードを、エクセルのシート上に設置したボタンクリックで実行するようにすれば完成です。


Sub 作成()
    UserForm1.Show
End Sub

以上、ユーザーフォームを使用した入力フォームの作り方でした。

入門用として準備したものなので、コードなどはあまり実用的ではありませんが、まずはユーザーフォームの入り口として、誰かの参考になれば幸いです。

Excel VBAの画像

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

Excel VBAの画像

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

Excel VBAの画像

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

Excel VBAの画像

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

Excel VBAの画像

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

Excel VBAの画像

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

Excel VBAの画像

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

Excel VBAの画像

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

Excel VBAの画像

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

Excel VBAの画像

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

About

EnjomonWebは、「えんじょもん」である元転勤族の管理人が石川県金沢市から発信する、WEB制作情報をメインとした情報発信サイトです。

コーディング習得過程で検索してもすぐに解決しなかったことや、初心者には分かりづらい内容を分かりやすく説明することができるサイトを目指しています。

※「えんじょもん」とは金沢弁で「遠方の人、県外出身の人」という意味の方言。