【VBA入門】簡単なユーザーフォームを作ってみよう

  • URLをコピーしました!
※当ブログではアフィリエイト広告を表示しています

こんにちは、理系夫婦の妻まゆみ(@rikeifufu_tsuma)です。

今回はVBAで簡単なユーザーフォームの作り方を紹介します

VBAで処理させる計算内容は第1回目と同じで、2つの数値を四則演算させます。

今回は入力の2つの数値をユーザーフォームから取得する方法でやってみましょう。

ユーザーフォームは、慣れてしまうと時間をかけることなく作成できます。

ユーザーが直感的に分かり易く操作できるように、積極的にユーザーフォームを活用していくことをおススメします!

※この記事で紹介している画像はExcel2019で作成したものです。Excelのバージョンによっては、多少違う部分があるかもしれません。

目次

処理の概要

ユーザーフォーム
ユーザーフォーム

上図のようなウィンドウをユーザーフォームと呼びます。

今回は、ユーザーフォームに2つの数値をユーザーが指定し「OK」をクリックしたら、四則演算の結果がメッセージボックスで表示されるツールを作成します。

ユーザーフォームを使った計算結果

上図がそのイメージです。

計算と、メッセージボックスで表示する部分は前回と全く同じです。

違うのは2つの数値の取得方法

その部分を説明していきます。

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

ユーザーフォームを作るには、ユーザーフォームを挿入し、ボタンなどを追加していく必要があります。

その手順を画像付きで紹介していきます。

ユーザーフォームの挿入方法

ユーザーフォームの挿入方法は、

  1. プロジェクトウィンドウで右クリック
  2. 「挿入」→「ユーザーフォーム」を選択

とやります。

ユーザーフォーム挿入方法
ユーザーフォームの挿入
ユーザーフォーム初期状態
ユーザーフォームの挿入結果

初期状態では、ユーザーフォーム上には何もありません。

ここから、ボタンやテキストボックスを追加していきます。

ラベルの追加

まずはユーザーフォーム上にラベルを追加してみましょう。

ツールボックスから「Label」(上段、左から2つ目)を選択します。

ツールボックスのラベルを選択

「Label」を選択した状態で、ユーザーフォーム上の好きな位置にドラッグします。
下図のような状態になります。

ラベルを追加
ラベルをユーザーフォームに追加

ラベルに表示させる文字列は、プロパティウィンドウの「Caption」で設定します。

ラベルのCaption設定

これでラベルの設定は終わりです。

フォント等はお好みで変更してください。

テキストボックスの追加

次はテキストボックスを追加してみましょう。

今回は、2つの数値をユーザーに入力してもらうため、テキストボックスを2つ追加します。

ツールボックスから「TextBox」(上段、左から3つ目)を選択します。

ツールボックス(テキストボックス)

「TextBox」を選択した状態で、ユーザーフォーム上にドラッグします。
下図のような状態になります。

テキストボックスの追加

ひとまずテキストボックスはこのままの設定で大丈夫です。

ボタンの追加

次に、ボタンを追加しましょう。

ツールボックスから「CommandButton」(下段、左から2つ目)を選択します。

ツールボックス(ボタン)の追加

「CommandButton」を選択した状態で、ユーザーフォーム上にドラッグします。
下図のような状態になります。

コマンドボタン挿入結果
ボタン挿入結果

ボタンに表示する文字列は、プロパティウィンドウの 「Caption」で設定します。

ボタンの表示を変更
ボタンのCaptionを変更

以上でユーザーフォームのデザインは終わりです。

ソースコード

ここでは、実際の処理部分を設定していきます。

さて、ユーザーフォームの処理部分は、どこにソースコードを書くのでしょうか?

ユーザーフォームのソースを表示するためには、ユーザーフォーム上で右クリックし、「コードを表示」を選択します。

ユーザーフォームを右クリック
ユーザーフォームを右クリック
コード表示結果
ユーザーフォームのコード表示結果

ユーザーフォームのコードの初期状態は、上図のように、「UserForm_Click()」となっています。
これは、ユーザーフォームをクリックしたら実行される関数です。
今回は必要ないので削除し、必要な関数のみ作成します。

必要なのは、ボタンを押したら2つの数値を演算する処理です。

なので、コードウィンドウの左上から「CommandButton1」を選択します。
そうすると、「CommandButton1_Click()」の関数の雛型が作成されます。
この関数の中に、ボタンがクリックされた際の処理を書いていきます。

フォーム上のツールの種類を選択
ユーザーフォーム上のツールの種類を選択
ユーザーフォームのコード(ボタンを選択)
コマンドボタンを選択した場合のコード初期状態

今回、ソースコードは2つの関数からなります。

1つは、ユーザーフォームを呼び出すためのメイン関数です。

もう1つがユーザーフォームの中身の関数となります。

それぞれ、以下のようにソースを記述します。

ユーザーフォームの呼び出し側(メイン関数)

Sub main()
    'ユーザーフォームの表示
    UserForm1.Show
End Sub

ユーザーフォーム側

'「OK」ボタンがクリックされたら行う処理
Private Sub CommandButton1_Click()
    Dim str_a As String
    Dim str_b As String
    
    Dim a As Double
    Dim b As Double
    
    Dim plus As Double
    Dim minus As Double
    Dim times As Double
    Dim div As Double
    
    'テキストボックスの値を取得
    str_a = TextBox1.Text
    str_b = TextBox2.Text
    
    '数値か判定
    If IsNumeric(str_a) = False Then
        MsgBox "数値を入力してください"
        Exit Sub
    End If
    
    If IsNumeric(str_b) = False Then
        MsgBox "数値を入力してください"
        Exit Sub
    End If
    
    'Doulbe型に変換
    a = CDbl(str_a)
    b = CDbl(str_b)
    
    '計算
    plus = a + b
    minus = a - b
    times = a * b
    div = a / b
    
    '結果を表示
    MsgBox "計算結果" + vbCrLf _
        + "a + b = " + CStr(plus) + vbCrLf _
        + "a - b = " + CStr(minus) + vbCrLf _
        + "a * b = " + CStr(times) + vbCrLf _
        + "a / b = " + CStr(div)
    
    'ユーザーフォームを閉じる
    Unload Me
End Sub

ソースの説明

2つの関数のソースを説明していきます。

ユーザーフォームの表示

Sub main()
    'ユーザーフォームの表示
    UserForm1.Show
End Sub

上記メイン関数は、前回と同様に、シート上のボタンと紐づけます。
シート上のボタンがクリックされたら、メイン関数が呼ばれ、メイン関数はユーザーフォームを表示します。

ユーザーフォームの表示は

ユーザーフォーム名.Show

で、できます。

テキストボックスの値を取得

次からは「CommandButton1_Click」関数の中身です。
まずは2つのテキストボックスに入力された値の取得コードから。

    str_a = TextBox1.Text
    str_b = TextBox2.Text

テキストボックスに表示されているテキストを取得して、文字列変数に代入するのは、

文字列変数 = テキストボックス名.Text

となります。

文字列として取得せず、数値として取得する方法もあります。

変数(Double型など) = テキストボックス名.Value

しかし、テキストボックス内に入力された文字が数字とは限らないため、今回は文字列として取得し、後から数値に変換するやり方をとっています
もちろん、テキストボックスに数値しか入力できないようにする方法もありますが、それはまた今度。

VBAのIf文

VBAのIf文は、C言語などとはちょっと違います。

If 条件文 Then
処理内容
End If

C言語のように{}で囲まないで、「If ~ Then」「End If」で囲みます。

また、判定式もC言語とは違っていて、例えば一致の場合は、

If a = b Then

となります。Cでは「a == b」ですよね。また、不一致の場合は

If a <> b Then

となります。Cでは「a != b」ですよね。

このような違いも、すぐに慣れますよ。

数値判定

    If IsNumeric(str_a) = False Then
        MsgBox "数値を入力してください"
        Exit Sub
    End If
    
    If IsNumeric(str_b) = False Then
        MsgBox "数値を入力してください"
        Exit Sub
    End If

テキストボックスから取得した文字列が数値か判定します。

IsNumeric(判定したい変数)

IsNumeric関数を使用して判定します。IsNumeric関数は

  • 判定した変数が数値なら「True」
  • 判定した変数が数値でないなら「False」

を返します。なので、

If IsNumeric(str_a) = False Then
   MsgBox “数値を入力してください”
   Exit Sub
End If


は、「str_aが数値でない(False)なら、メッセージを表示して、関数の処理を中断する」という内容になります。

Exit Sub

は、関数を終了させるコードです。

文字列から数値に変換

    a = CDbl(str_a)
    b = CDbl(str_b)

今回は文字列変数をDouble型変数に変換させたいので、

Double型変数 = CDbl(文字列変数)

と記述します。変換前に数値かチェック済みなので、変換エラーにはならないはず。

ユーザーフォームを閉じる

Unload Me

2つの数値を演算して結果を表示後、ユーザーフォームを閉じる処理を入れます。

ユーザーフォームを閉じるのは

Unload ユーザーフォーム名

です。

今回、ユーザーフォームのコードの中で記述しているので、ユーザーフォーム名は「Me」とすることができます。
「Me」は「UserForm1」のことになります。


これで一通りの説明は終わりました。

説明を省いた箇所は前回説明したのと同じですので、そちらを参考にしてください。

では、作成したコードを実行してみましょう。

ツール実行結果

これは完全に好みが分かれますが、テキストボックスに入力した数字が、左寄せになっていて気持ち悪いですね。
右寄せに変えてみましょう。

テキストボックスを選択した状態で、プロパティウィンドウの「TextAlign」を「3 -fmTextAlignRight」に変更します。

テキストボックスのアライメント設定
テキストボックスのアライメント設定

右寄せに変更後の実行結果は下図のようになります。

テキストボックスを右寄せに変更後

最後に、今回作った試作品の全体の流れの画面キャプチャを貼っておきます。

エクセルシート(ボタン設置)
①Excelシート ボタン設置 
ユーザーフォーム表示結果
②ボタンクリック→ユーザーフォーム表示
計算結果の表示
③数値入力→OKボタン→計算結果の表示

さいごに

VBAでユーザーフォームを作成する方法を紹介しました。

ユーザーフォームを使うのがいいか、Excelシート上で必要なデータを設定するのがいいかは、人によって好みが分かれます。

個人的にはユーザーフォームのほうが、ユーザーにとって優しいかなと思っています。

ユーザーフォームは使えて損はないので、この機会に作り方を習得してみてくださいね!

んじゃ、また~

おススメのプログラミング独学方法はこちらの記事にまとめました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

関連記事

応援よろしくお願いします☆

この記事を書いた人

理系夫婦の妻のほうです。
大学、大学院(修士)で物理を専攻。
2016年に長女を出産、2021年に長男を出産。
フルタイム勤務ワーママ→休職→専業主婦。

コメント

コメントする

目次