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

こんにちは!大阪市住之江区に拠点を置く会社『縁紡ぐ』の稲垣です。

当社は、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.
  • 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
  • お客様にとって本当に良いことかを第一に考える人
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次