こんにちは!大阪市住之江区に拠点を置く会社『縁紡ぐ』の稲垣です。
当社は、Excel、ACCESS、RPAなどのシステム開発や既存ツールを使った業務効率化の提案、また、ITスキルアップのための教育に力を入れています。効率的なビジネス運営を目指している企業様、ITスキルの向上を図りたい企業や個人の方に、最適なご提案をさせていただきます。業務プロセスの改善と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.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント