【VBA】フォームの値を呼び出し元によって異なる初期値を設定する方法

こんにちは!大阪市を拠点に活動している『縁紡ぐ』の稲垣です。
SWELLを使ったホームページ制作や、Excel、ACCESS、RPAなどのシステム開発を行っています。
また、Excel、Word、Outlookの研修や、情報セキュリティ研修も行っています。身近なITの相談相手になりたいと思っています。
お気軽にお問い合わせください。
業務効率化を目指してVBAで作成するときに、フォームは、使える武器ですね!そんな、フォームを一段階、レベルアップした使い方をご紹介しますね!
VBAを使ったフォームの呼び出し元によって、内容を変更する方法が分かります!

せっかく作ったフォームなんだけど、呼び出された状況によって、表示内容を変えたいけど、出来ないなぁ



VBAでフォームに初期値を動的に設定する方法は、複数あるので紹介するね!
本記事の内容を使って、VBAで業務効率化をぜひ実践してくださいね!
フォームに異なる初期値を設定する方法
はい、それでは、早速やっていきましょう!
呼びだれるフォームを作成



フォームを作成して、表示内容を変更したいテキストボックスを配置してください。







フォームにテキストボックスを配置したよ!
名前は、『TextBox1』という、初期設定のままにしてあるよ
固定の初期値を設定する方法



まずは、動的ではなく、固定で初期値を設定する方法をやってみよう!
Valueプロパティに設定



プロパティって、左下に表示されているウインドウだよね?



そう!その通り!
Valueプロパティで初期値を設定することができるんだ。





設定したら、VBEでも表示されたよ!





実行してみよう!





初期値が設定できた!
ユーザーフォームの、Valueプロパティに設定することで、初期表示時に値を設定することができます
フォームがインスタンス化される時に設定する方法



次は、フォームがインスタンス化され表示される時に設定する方法だよ



インスタンス化って、設計図から実態を作り出すことだよね?



その通り!インスタンス化するときに、初期化メソッドがVBAには用意されているんだ!それを利用してみよう!


Private Sub UserForm_Initialize()
End Sub



これが、初期化メソッドです!
では、先ほどのテキストボックスに、値を設定するコードを追加してみましょう!
Private Sub UserForm_Initialize()
Me.TextBox1 = "初期化メソッド"
End Sub



さっき、Valueプロパティに設定した値は修正しなくて大丈夫?
とりあえず実行してみよう





初期値は確かに設定してあるけど、インスタンス化される時にプログラムが実行されて、テキストボックスに『初期化メソッド』と表示されたんだ
初期化メソッドは、プロパティの設定より後に実行される



VBAの初期化メソッドには、他の言語ではできるのにできないことがあるんだ



できないことって何だろう?



それは、初期化メソッドにパラメーターを渡すことができないんだ!
つまり、下のようなコードは書けないだ


表示するときに動的に値を設定する方法



次は、動的に変える方法を紹介しますね!
セルの値を表示する



セルの値を初期値にしたいです!
イメージしやすい処理だから



先ほどの初期化メソッドを使って実現してみよう!
Private Sub UserForm_Initialize()
Me.TextBox1 = Worksheets("Sheet1").Range("A1")
End Sub
実行結果





これができるだけで、助かります!
Showメソッド実行前に設定する



わたしが呼び出し元によって、初期値を変更する方法を紹介するね!



どんな方法ですか?



Showメソッド使う前に、フォームをインスタンス化して値を設定しておく方法だよ
Public Sub test()
'インスタンス化
Dim ufm As UserForm1
Set ufm = New UserForm1
'初期値を設定
UserForm1.TextBox1 = "プログラムで設定"
UserForm1.Show
End Sub



Showメソッドを使う前に、インスタンス化できるなんて知らなかった💦



この方法は、呼び出し元(標準モジュールなど)で処理を書くから初期値を動的に設定することが簡単なんだ


フォームは、インスタンス化してShowメソッド前に処理を動かすことができる!
別プログラムから呼び出してみる
Public Sub test()
'インスタンス化
Dim ufm As UserForm1
Set ufm = New UserForm1
'初期値を設定
UserForm1.TextBox1 = "プログラムで設定"
UserForm1.Show
End Sub
Public Sub test2()
'インスタンス化
Dim ufm As UserForm1
Set ufm = New UserForm1
'初期値を設定
UserForm1.TextBox1 = "実験だよ"
UserForm1.Show
End Sub



これでtest2とtest1とで処理がわけれるのね!
test2を実行してみよっと





素晴らしいね!
これで、ユーザーフォームの初期値について理解できたね!
まとめ
VBAでボタンによって異なる初期値を設定する方法を解説しました。これにより、ユーザーは求める情報にすぐにアクセスできるようになります。業務効率化を目指す方々にとって、非常に役立つテクニックです。もし、さらに専門的なサポートが必要な場合は、ぜひご依頼ください。


稲垣
- Excel、ACCESSでのシステム開発が得意
- ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
- 自家焙煎するほどのコーヒー好き
- 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
- 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント