こんにちは、理系夫婦の妻まゆみ(@rikeifufu_tsuma)です。
今回はVBAで簡単なユーザーフォームの作り方を紹介します。
VBAで処理させる計算内容は第1回目と同じで、2つの数値を四則演算させます。
![](https://rikei-fufu.com/wp-content/uploads/2019/04/VBAを始めよう-300x300.jpg)
今回は入力の2つの数値をユーザーフォームから取得する方法でやってみましょう。
ユーザーフォームは、慣れてしまうと時間をかけることなく作成できます。
ユーザーが直感的に分かり易く操作できるように、積極的にユーザーフォームを活用していくことをおススメします!
※この記事で紹介している画像はExcel2019で作成したものです。Excelのバージョンによっては、多少違う部分があるかもしれません。
処理の概要
![ユーザーフォーム](https://rikei-fufu.com/wp-content/uploads/2019/04/ユーザーフォーム-1-300x242.png)
上図のようなウィンドウをユーザーフォームと呼びます。
今回は、ユーザーフォームに2つの数値をユーザーが指定し「OK」をクリックしたら、四則演算の結果がメッセージボックスで表示されるツールを作成します。
![ユーザーフォームを使った計算結果](https://rikei-fufu.com/wp-content/uploads/2019/04/result2-300x208.png)
上図がそのイメージです。
計算と、メッセージボックスで表示する部分は前回と全く同じです。
違うのは2つの数値の取得方法。
その部分を説明していきます。
VBAでユーザーフォームの作り方
ユーザーフォームを作るには、ユーザーフォームを挿入し、ボタンなどを追加していく必要があります。
その手順を画像付きで紹介していきます。
ユーザーフォームの挿入方法
ユーザーフォームの挿入方法は、
- プロジェクトウィンドウで右クリック
- 「挿入」→「ユーザーフォーム」を選択
とやります。
![ユーザーフォーム挿入方法](https://rikei-fufu.com/wp-content/uploads/2019/04/userform1.png)
![ユーザーフォーム初期状態](https://rikei-fufu.com/wp-content/uploads/2019/04/userform2.png)
初期状態では、ユーザーフォーム上には何もありません。
ここから、ボタンやテキストボックスを追加していきます。
ラベルの追加
まずはユーザーフォーム上にラベルを追加してみましょう。
ツールボックスから「Label」(上段、左から2つ目)を選択します。
![ツールボックスのラベルを選択](https://rikei-fufu.com/wp-content/uploads/2019/04/toolbox-1.png)
「Label」を選択した状態で、ユーザーフォーム上の好きな位置にドラッグします。
下図のような状態になります。
![ラベルを追加](https://rikei-fufu.com/wp-content/uploads/2019/04/label.png)
ラベルに表示させる文字列は、プロパティウィンドウの「Caption」で設定します。
![ラベルのCaption設定](https://rikei-fufu.com/wp-content/uploads/2019/04/label2-1024x963.png)
これでラベルの設定は終わりです。
フォント等はお好みで変更してください。
テキストボックスの追加
次はテキストボックスを追加してみましょう。
今回は、2つの数値をユーザーに入力してもらうため、テキストボックスを2つ追加します。
ツールボックスから「TextBox」(上段、左から3つ目)を選択します。
![ツールボックス(テキストボックス)](https://rikei-fufu.com/wp-content/uploads/2019/04/toolbox2.png)
「TextBox」を選択した状態で、ユーザーフォーム上にドラッグします。
下図のような状態になります。
![テキストボックスの追加](https://rikei-fufu.com/wp-content/uploads/2019/04/textbox-1024x1002.png)
ひとまずテキストボックスはこのままの設定で大丈夫です。
ボタンの追加
次に、ボタンを追加しましょう。
ツールボックスから「CommandButton」(下段、左から2つ目)を選択します。
![ツールボックス(ボタン)の追加](https://rikei-fufu.com/wp-content/uploads/2019/05/toolbox3-300x189.png)
「CommandButton」を選択した状態で、ユーザーフォーム上にドラッグします。
下図のような状態になります。
![コマンドボタン挿入結果](https://rikei-fufu.com/wp-content/uploads/2019/05/button1-1024x984.png)
ボタンに表示する文字列は、プロパティウィンドウの 「Caption」で設定します。
![ボタンの表示を変更](https://rikei-fufu.com/wp-content/uploads/2019/05/button2-1024x870.png)
以上でユーザーフォームのデザインは終わりです。
ソースコード
ここでは、実際の処理部分を設定していきます。
さて、ユーザーフォームの処理部分は、どこにソースコードを書くのでしょうか?
ユーザーフォームのソースを表示するためには、ユーザーフォーム上で右クリックし、「コードを表示」を選択します。
![ユーザーフォームを右クリック](https://rikei-fufu.com/wp-content/uploads/2019/05/cood1-1024x904.png)
![コード表示結果](https://rikei-fufu.com/wp-content/uploads/2019/05/cood2-1024x544.png)
ユーザーフォームのコードの初期状態は、上図のように、「UserForm_Click()」となっています。
これは、ユーザーフォームをクリックしたら実行される関数です。
今回は必要ないので削除し、必要な関数のみ作成します。
必要なのは、ボタンを押したら2つの数値を演算する処理です。
なので、コードウィンドウの左上から「CommandButton1」を選択します。
そうすると、「CommandButton1_Click()」の関数の雛型が作成されます。
この関数の中に、ボタンがクリックされた際の処理を書いていきます。
![フォーム上のツールの種類を選択](https://rikei-fufu.com/wp-content/uploads/2019/05/cood3.png)
![ユーザーフォームのコード(ボタンを選択)](https://rikei-fufu.com/wp-content/uploads/2019/05/cood4.png)
今回、ソースコードは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」のことになります。
これで一通りの説明は終わりました。
説明を省いた箇所は前回説明したのと同じですので、そちらを参考にしてください。
では、作成したコードを実行してみましょう。
![ツール実行結果](https://rikei-fufu.com/wp-content/uploads/2019/05/result.png)
これは完全に好みが分かれますが、テキストボックスに入力した数字が、左寄せになっていて気持ち悪いですね。
右寄せに変えてみましょう。
テキストボックスを選択した状態で、プロパティウィンドウの「TextAlign」を「3 -fmTextAlignRight」に変更します。
![テキストボックスのアライメント設定](https://rikei-fufu.com/wp-content/uploads/2019/05/textalign-1024x889.png)
右寄せに変更後の実行結果は下図のようになります。
![テキストボックスを右寄せに変更後](https://rikei-fufu.com/wp-content/uploads/2019/05/result2.png)
最後に、今回作った試作品の全体の流れの画面キャプチャを貼っておきます。
![エクセルシート(ボタン設置)](https://rikei-fufu.com/wp-content/uploads/2019/05/sheet1-1024x752.png)
![ユーザーフォーム表示結果](https://rikei-fufu.com/wp-content/uploads/2019/05/sheet2-1024x755.png)
![計算結果の表示](https://rikei-fufu.com/wp-content/uploads/2019/05/sheet3-1024x751.png)
さいごに
VBAでユーザーフォームを作成する方法を紹介しました。
ユーザーフォームを使うのがいいか、Excelシート上で必要なデータを設定するのがいいかは、人によって好みが分かれます。
個人的にはユーザーフォームのほうが、ユーザーにとって優しいかなと思っています。
ユーザーフォームは使えて損はないので、この機会に作り方を習得してみてくださいね!
んじゃ、また~
おススメのプログラミング独学方法はこちらの記事にまとめました!
![](https://rikei-fufu.com/wp-content/uploads/2019/09/programming-300x169.jpg)
コメント