Excel VBAでUserForm (ユーザーフォーム) を作成する

2020年5月6日

ユーザーフォームは、テキストボックスやリストボックス、チェックボックスなどを用いてプログラマーがユーザーにあわせて作成することができる入力フォームのことです。
入力フォームを作成することにより、入力間違いを防いだり、入力手間を省けたりしますので作業の効率を上げることができます。
今回はリストボックスを使ったEXCELのサンプルプログラムを紹介します。ユーザーフォームの利便性を実感して頂けると思います。

UserForm (ユーザーフォーム)のサンプルアプリの説明

サンプルコードの処理内容は以下の通りです。
  「注文」ボタンをクリック → 商品リストから注文する商品を選択 → 注文数を入力
   → 商品の単価と注文数から注文した合計金額を計算して、注文商品名・注文数・合計金額を表示する。
 それでは具体的に操作の動きを見ていきます。
 「注文」ボタンをクリックすると、下にある商品の表がリスト化されたダイアログボックスが開きます。

下の例では商品のリストからノートを選択して「OK」ボタンをクリックした例です。

続いて、注文数を入力します。注文数として「4」を入力しています。

下の赤枠に注文した商品名と注文個数、注文した合計金額が入ります。

ユーザーフォームの作成方法

それでは商品一覧をリスト表示するユーザーフォームを作成します。
Excelの「開発メニュー」から「コードの表示」を選択して下の画面を表示します。
「挿入」メニューから「ユーザーフォーム」を選択します。

以下の画面が表示されます。

ツールボックスで下記赤枠の「リストボックス」を選択します。

マウスをドラックしたまま描画し、以下のようなリストボックスを表示する範囲を設定します。

続いて、リストボックスの上にコメントを入れます。

以下の文言を入力します。併せてフォントの形式を指定します。

商品を選択した後に操作する「OK」ボタンを配置します。
ツールボックスの「コマンドボタン」を選択します。

下の赤枠箇所を操作して、ボタン名と文字の形式を設定します。

同様に「キャンセル」ボタンを配置します。

リストボックス内にデータを表示させます。
プロパティボックスの赤枠箇所を以下のように設定します。
  ColumnCount  → 表示する列数
  ColumnHeads → リストにタイトルを表示する場合は「True」 表示しない場合は 「False」
  RowSource   → リスト化するデータの範囲(エクセルシート上にある商品一覧の範囲を指定)

ユーザーフォームを操作した際にどのように動作させるかをコードで記載します。
UserForm1 を右クリックして、「コードの表示」を選択します。

下記赤丸の箇所を以下のように選択し、それぞれの該当箇所にコードを記入します。

上記UserFormコードの解説

Private Sub CommandButton1_Click()

 '「OK」ボタンが選択されたらリストボックスで選択したリストの値を取得する
 With ListBox1
 
   If .ListIndex = -1 Then
   
      '未選択だった場合にメッセージを表示
       MsgBox "未選択です。"
       
   Else
   
      '選択したリストの1列目(商品)と2列目(単価)を取得
       shohin = .List(.ListIndex, 0)
       tanka = .List(.ListIndex, 1)

   End If
   
 End With

   'ユーザーフォームを閉じる
   Unload UserForm1

End Sub

'--------------------------------------------------------

Private Sub CommandButton2_Click()

  '「キャンセル」ボタンが選択されたらユーザーフォームを閉じる
  Unload UserForm1

End Sub

サンプルアプリのソースコード    コードの作成手順はこちら

「Module1」の箇所にサンプルアプリのソースコードを記述します。

ソースコード

Option Explicit

'選択した商品を入れる変数を定義
Public shohin
'選択した商品の単価を入れる変数を定義
Public tanka
'注文数を入れる変数を定義
Public cyumon

'--------------------------------------
Sub ボタン1_Click()

'妥当性シート選択
Worksheets("Sheet1").Select

'ユーザフォーム表示
UserForm1.Show

'商品を選択しなかった場合は終了
If shohin = "" Then
    MsgBox "商品が未選択なので終了します。", vbOKOnly
    Exit Sub
End If

'ワークシートを指定
Dim Sh As Worksheet
Set Sh = ThisWorkbook.Worksheets("Sheet1")

'注文数を入力する。
cyumon = InputBox("注文数を入力して下さい。", "注文数入力", "")

'注文数を入力しなかった場合は終了
If cyumon = "" Then
    MsgBox "注文数が未入力なので終了します。", vbOKOnly
    Exit Sub
End If

'商品をセット
Cells(20, 2).Value = shohin
'注文数を注文数欄にセット
Cells(20, 3).Value = cyumon
'合計金額欄に合計金額をセット
Cells(20, 4).Value = Val(cyumon) * tanka

'合計金額セルを選択
Cells(20, 4).Select

'商品を入れた変数をリセット
shohin = ""
'商品の単価を入れた変数をリセット
tanka = ""
'注文数を入れた変数をリセット
cyumon = ""

End Sub

以上で完了です。様々な場面でユーザーフォームが活用できますので参考にして下さい。