ユーザーフォーム上のテキストボックスに入力されている値を取得する方法をご説明します。
テキストボックスはユーザーに値を入力してもらう、もしくは表示するために使用するコントロールです。
そのため、入力する値を取得する処理が必要になることがあります。
値を取得するためには、テキストボックスを取得する必要があります。
コントロールの取得方法と、特定のコントロールを指定するだけではなく、複数あるコントロールからテキストボックスだけを判定して、入力されている値を取得する方法についてもご説明したいと思います。
その他のテキストボックスについての処理は下記記事をご覧ください。
1.テキストボックスを取得する方法
テキストボックスを取得するには直接コントロールを指定する方法と、ユーザーフォーム上にあるコントロールをすべてループして、条件を満たしたコントロールを取得する方法があります。
指定したテキストボックスの取得
特定のテキストボックスを指定して取得する方法です。
コントロールを指定するにはコントロール名かインデックス番号で指定します。
それぞれ次のように記述します。
Controls(“コントロール名”)
Controls(番号)
ユーザーフォーム上のコントロールをループして取得する
ユーザーフォーム上に設置されているコントロールをすべてループして、コントロールの種類がテキストボックスの場合のみ取得する方法です。
条件となるテキストボックスは特定できるコントロール名の場合は、名前でも対応出来ます。
コントロールをすべてループするには「For Each In Next」でループするのが最も簡単です。
コントロールの種類がテキストボックスか判定するには「TypeName」関数を使用します。
テキストボックスの種類を特定するのは「TextBox」です。
「TypeName」は次のように記述します。
TypeName(Control)
Controlには Controls(“コントロール名”) か、 Controls(番号)を指定します。
2.テキストボックスの値を取得する
コントロールの取得方法の次は、値の取得方法です。
こちらも難しくありません。
「Valueプロパティ」を参照することで取得できます。
次のように記述します。
Control.Value
取得した値はすべて文字列で格納されます。
3.サンプルコード
コントロールの取得方法と値の取得方法がわかりましたので、サンプルコードです。
今回は複数のコントロールが設置されたユーザーフォームを使用したいと思います。
ラベル5個、テキストボックス5個、コンボボックス1個、リストボックス1個、コマンドボタン2個の以下のようなユーザーフォームを用意しました。
指定したテキストボックスの値を取得するサンプル
まずはコントロール名を指定した場合のサンプルコードです。
シンプルでとても簡単です。
ただし、コントロールの数が増えると毎回指定して操作するには大変です。
Sub Sample1()
With UserForm1
MsgBox .Controls("TextBox1").Value
End With
End Sub
コントロールをすべてループして値を取得する方法
次はユーザーフォーム上のテキストボックスをすべて取得して、値を取得する方法です。
こちらは値を取得する以外にも、テキストボックスすべてに同じ処理をしたい場合等にも使用できます。
「For Each In Next」で値を取得するサンプル
Sub Sample2()
Dim MyCtrl As Object
Dim MyStr As String
With UserForm1
For Each MyCtrl In .Controls 'ユーザーフォーム上のコントロールをループ
If TypeName(MyCtrl) = "TextBox" Then
MyStr = MyStr & MyCtrl.Value & vbCrLf 'テキストボックスの値を取得
End If
Next
MsgBox MyStr
End With
End Sub
「For Each MyCtrl In .Controls」でユーザーフォーム上のコントロールをループしています。
「If TypeName(MyCtrl) = “TextBox” Then」で取得したコントロールがテキストボックスか判定しています。
「MyCtrl.Value」でテキストボックスの場合は入力されている値を取得して、変数に格納しています。
「For Next」で値を取得するサンプル
「For Next」でループするにはユーザーフォーム上のコントロールの数を取得する必要があります。
コントロールの数を取得するには「Count」プロパティで取得します。
Sub Sample3()
Dim MyCtrl As Object
Dim MyStr As String
Dim i As Long
With UserForm1
For i = 0 To .Controls.Count - 1 'ユーザーフォーム上のコントロール数分をループ
If TypeName(.Controls(i)) = "TextBox" Then
MyStr = MyStr & .Controls(i).Value & vbCrLf 'テキストボックスの値を取得
End If
Next i
MsgBox MyStr
End With
End Sub
「For i = 0 To .Controls.Count – 1」でコントロールをループします。
0から始まるのがポイントです。
「If TypeName(.Controls(i)) = “TextBox” Then」で先ほどと違い、変数ではなく「.Controls(i)」でコントロールを指定します。