Excel VBA UserForm を使ってみましょう

「ユーザーフォーム」というのは、名前のとおり「ユーザー」がオリジナルの「固定ダイアログ」と言われるフォームウィンドウを自由にデザイン作成して利用できる機能です。

一例として、過去に下の記事で「プログレスバー」を表示するために利用していました。

くるみこ
くるみこ

上の記事で使っていた「プログレスバー」を表示する方法として「ユーザーフォーム」を使っていました。詳しい解説はしていませんでしたので、この機会に「ユーザーフォーム」について勉強しましょう(^^)/

ユーザーフォームって難しそうですね(^^;
ついていけるかどうかすごく心配だけど、よろしくお願いします!

【この記事でわかること
・ユーザーフォームとはどういうものかがわかります
ユーザーフォームの基本的な作り方がわかります

前回記事のおさらいは、下のカードをクリックすれば開きます(^^ゞ

くるみこ
くるみこ

前回記事は、ピボットグラフをAddChart2メソッドを使って作成する方法の解説記事でした。よければ覗いてみてね(^^)/

ユーザーフォームについて

「ユーザーフォーム」は、ユーザーの要求を入力する「入力画面」や、動作を一括処理するための条件を設定する「設定画面」として利用したりします。また、過去の記事で紹介した「プログレスバー」表示などのように動作状況をビジュアルで表現したりする方法としても使用できます。

ただし、これらの方法はワークシート上だけでも「入力画面」や「設定画面」「状況表示」としての動作は可能なので、必須となるものではないという考え方もあると思います。

でも、Excel VBAを使って自分自身のオリジナル「入力画面」(固定ダイアログ)を自由にデザインして、文字や入力ボックス、ボタンや様々なパーツをユーザーフォームに配置してエクセルワークシート上に表示して利用できるんです。なんだかワクワクしませんか?
そんな機能が、VBAのユーザーホームで実現できるのです。

そして一番重要なのは、ユーザーフォームを使うことで、ワークシートそのものには触らずに文字や数値などを入力できるようになります。そうすることで、ユーザーの不必要な操作を回避でき、意図したとおりに動作させることが可能になります。せっかく設定した関数やVBAプログラムが機能しなくなってしまうトラブルなどを回避させることができるというような利点があります。

どうですか、だんだんユーザーフォームを使ってみたくなってきたんじゃないですか?

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

・それでは実際に「ユーザーフォーム」を作成してみましょう

VBEでユーザーフォームを追加します

・ユーザーフォームはVBE上からプロジェクトに追加挿入します。

・上図のように、VBEのプロジェクトエクスプローラでプロジェクトを右クリックして「挿入」→「ユーザーフォーム」をクリックします。
・すると、下図のように「ユーザーフォーム(UserForm)」が挿入されます。

・追加された「空」の「UserForm」と一緒に「ツールボックス」が現われます。
・この「ツールボックス」は「表示」メニューからいつでも選択表示できます。
・ユーザーフォーム(UserForm)はWindowsの一般的な入力フォームと同様のものです。

「ツールボックス」からコントロールを貼り付けます

・ユーザーフォームに「ツールボックス」から貼り付けたいコントロールをクリックし、フォーム上で貼り付け範囲をドラッグすることでコトロールがフォーム上に配置されます。

・配置位置や大きさなどの細かい調整は、コントロールのドラッグハンドルや、プロパティウィンドウの項目値に直接入力することで調節できます。
・ユーザーフォーム自体の大きさなども同じように設定できます。

見出しやキャプションを設定して成形します

・見出し「設定値入力」には「ラベル」コントロールを配置しています。
・フォームのキャプションを「入力フォーム」に変更しています。
・コマンドボタンのキャプションも「登録」に変更しています。

コントロールからコードを表示できます

・上の画像のとおり、コントロールをダブルクリックするか、「右クリック」→「コードの表示」またはプロジェクトエクスプローラのボタンからも表示が可能です。
・図の「コマンド」ボタンの場合は、次のようなクリックイベントのコードが開きます。

Option Explicit
Private Sub CommandButton1_Click()

End Sub

イベント発生時に実行するコードを書きます

コマンドボタンのクリックイベント

Option Explicit
Private Sub CommandButton1_Click()
    Range("A1").Value = TextBox1.Text
    Unload Me
End Sub

・「登録」ボタンが押されると発生するイベントです。
・3行目、シートのA1セルに「テキストボックス」に入力されている値を書き込みます。
・4行目、Unload Me で「ユーザーフォーム」自身を「Unload」します(閉じます)

ワークシートのSelectionChangeイベント

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rng As String
    rng = Target.Address
    If rng = Range("A1").Address Then UserForm1.Show
    Range("A2").Select
End Sub

・ユーザーフォームの呼び出しをここに書いていきます。
ユーザーフォームの呼び出しは、5行目の「UserForm1.Show」メソッドです
・4行目で、選択されてイベントが発生した場所(アドレス値)を変数に代入しています。
・5行目で、発生したアドレスがA1セルだった場合、ユーザーフォームを表示します
・6行目は、セルをA2選択で変更しています。この理由は、SelectionChangeイベントは既に選択されているセルには発生しないためです。

動作を確認してみます

・実際に動作確認した時のGIF画像です。

・A1セル以外を選択した場合はユーザーフォームは表示されません。
・ユーザーフォームに入力されたテキストがA1セルに書き込まれています。
・空白の場合にも書き込まれていることが確認できます。
・書き込み後にユーザーフォームが閉じることも確認できました。

スポンサーリンク

まとめ(おわりに)

・いかがでしたでしょうか?
「いつも汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーを念頭に記事を書いています。
・今回も、記事内で使用したコードのサンプルファイルを登録していますのでご利用ください。
今までの記事のサンプルも登録していますのでよろしければお使いください(^^)

まとめと感想など

くるみこ
くるみこ

ユーザーフォームの基本を解説しました。とりあえずは作成できるところまでは出来るようになったのはないでしょうか(^^)

はい、そうですね。ユーザーフォームを作るところまでは意外と簡単なんですね(^^)でも、カッコよく作るにはセンスが無いからこの先どうなっていくのかすごく不安です(^-^;

くるみこ
くるみこ

カッコよく作るのも良いと思いますが、機能的に作ることが大事ですね!
見た目のカッコよさよりも、設定をよく考えて作りこんでいくことを優先していきましょう。当面、ユーザーフォームについての解説を継続していきます。これからもよろしくお願いしますm(_ _)m

【今回わかったことは】
・Excel VBA ユーザーフォームとはどういうものかがわかりました
・UserFormの基本的な作り方がわかりました
・コマンドボタンのクリックイベントの基本的処理方法がわかりました
・ワークシートのSelectionChangeイベントを使った基本的処理方法がわかりました
ユーザーフォームは「Show」メソッドで開き「Unload」メソッドで閉じることがわかりました

今後の記事について

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m

【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思います・・・・・
・今後の記事にもご期待ください(^^)/

記事のサンプルファイルをダウンロードできます

今回の記事のサンプルをダウンロードできるようにしています
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください

スポンサーリンク

スポンサーリンク