テキストボックスの使い方
テキストボックスはユーザーフォームでよく使われる部品です。
注意したいのは、Excelのセルと同様には使えないということです。
テキストボックスは、数値や日付なども文字列として扱います。
シート上のセルから値を受け取ったり、代入する時は自動変換などに注意が必要です。
サンプルの準備
これまでと同じですが、ユーザーフォームの他に標準モジュールを使います。
標準モジュールには、以下のコードを書いてユーザーフォームを開く処理を書きます。
Sub macro()
UserForm1.Show
End Sub
ユーザーフォームの方は、コマンドボタンを1つ配置し、キャプションを「OK」にします。
初期化の Initialize は今回は使用しません。
’コマンドボタンクリック
Private Sub CommandButton1_Click()
Unload Me
End Sub
テキストボックスを配置
テキストボックスはツールボックスを使って配置します。
![](https://help-vba.com/wp-content/uploads/2022/12/sc_NoName_2022-12-25_10-31-22_No-00.png)
配置出来たら必要に応じてオブジェクト名を変更しますが、今回はTextBox1のままにします。
![](https://help-vba.com/wp-content/uploads/2022/12/sc_NoName_2022-12-25_10-31-38_No-00.png)
主要なプロパティ
続いて必要なプロパティ値を変更しますが、ここでは主要なプロパティを挙げておきます。
![](https://help-vba.com/wp-content/uploads/2022/12/sc_NoName_2022-12-25_11-7-0_No-00.png)
Font プロパティ
文字列のフォントを指定するプロパティです。ダイアログで変更できます。
![](https://help-vba.com/wp-content/uploads/2022/12/sc_NoName_2022-12-25_16-4-55_No-00.png)
IMEMode プロパティ
IMEモードの半角・全角などの指定を設定できます。
![](https://help-vba.com/wp-content/uploads/2022/12/sc_NoName_2022-12-25_16-5-46_No-00.png)
TextArigin プロパティ
右寄せ、中央寄せ、左寄せなどが指定できます。
![](https://help-vba.com/wp-content/uploads/2022/12/sc_NoName_2022-12-25_16-5-55_No-00.png)
尚、セルとは異なり、上下の位置調整や縦書きなどには対応していません。
テキストボックスに値をセットする
プロパティにTextというのがあります。Textという名の通りテキスト形式で受け入れます。
TextBox1.Text = “こんにちは”
ただ、数値を文字列に変換してからセットする必要はありません。
TextBox1.Text = 123
セルの値をセットする場合
セルの値を代入することもできます。
ただし、日付などで書式を変更している場合はセル上の表示とは異なる場合がありますので注意してください。
Range や Cells で値を渡す時は、Valueプロパティと Textプロパティで値が異なる場合があります。
例えば、通貨の書式設定で ”\1,200” などとしている場合、
Valueプロパティでは、数値の値である ”1200″ が渡され、
Textプロパティでは、表示される書式の ”\1,200″ そのものが文字列として渡されます。
TextBox1.Text = Range(“A1”).Value ’1200
TextBox1.Text = Range(“A1”).Text ’\1,200
変換が必要ならば Format関数などを使用して渡します。
セルの値が文字列で設定されている場合は、両者の違いはありません。
テキストボックスの値を他へ渡す
テキストボックスの値を変数やセルなどに文字列として渡すことができます。
同じくTextプロパティを使用します。
Range(“A2”).value = TextBox1.Text
テキストボックスに”\1,200”と入力すると、セルには、”\1,200”という文字列として入力されます。つまり通貨の書式設定がなされた1200ではないという事です。
文字列型やVariant型の変数に渡す場合は問題ありませんが、数値型や日付型に渡したい場合は、関数を使って変換したものを代入します。
数値ならば、CInt関数やVal関数、日付型ならば、CDate関数になるでしょう。
それぞれの関数に変換できる・できないの制約がありますので、エラーを起こさないための工夫も必要になってきます。
例えば、日付を入力するのであれば、年・月・日と個別にテキストボックスを設けて、それぞれ数値であるか IsNumeric関数で確認すれば良いでしょう。
このようにテキストボックスでは、ユーザーがどのような値を入力してくるかがわからないため適合する値かどうか検査するための処理が必要になる場合があります。
コマンドボタンクリックのプロシージャを以下のように書き換えます。
Private Sub CommandButton1_Click()
Range("A2").Value = Me.TextBox1.Text
'Unload Me ’コメントアウトして無効化します。
End Sub
入力内容に制限をかけたい時
テキストボックスの入力に制限をかけたい時は、BeforeUpdateというイベントを使います。
BeforeUpdateは、テキストボックスの入力内容が確定する前に呼び出されるイベントプロシージャなので、ここで判定処理を通します。
もし、制限をかけたい時には、引数の Cancel に True を返せば、入力内容の確定はキャンセルされテキストボックスにカーソルが戻ります。
サンプルとして半角数字のみを入力させたい時の処理を示します。
BeforeUpdateはイベントプロシージャですので、VBEのコード画面のドロップボックスのTextbox1から選択します。
'内容の変更が確定される直前に発生するイベント
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(TextBox1.Text) = False Then
MsgBox "半角数字を入力してください"
Cancel = True
End If
End Sub
テキストボックスのまとめ
・テキストボックスは文字列型を扱うコントロール。
・主要なプロパティとしては、Font、IMEMode、TextArigin などがあります。
・セルや変数に代入する時は文字列型であることに注意。
・入力内容に制限をかけたい時は、BeforeUpdateイベントを使います。
ユーザーフォームの使い方
・ユーザーフォームのプログラミング(準備編)
・ユーザーフォーム 第1回(起動と終了)
・ユーザーフォーム 第2回(ボタン)
・ユーザーフォーム 第3回(ラベル)
・ユーザーフォーム 第4回(テキストボックス)
・ユーザーフォーム 第5回(モーダル・モードレス)
・ユーザーフォーム 第6回(チェックボックス)
・ユーザーフォーム 第7回(オプションボタン)
・ユーザーフォーム 第8回(コンボボックス)
・ユーザーフォーム 第9回(リストボックス)
・ユーザーフォーム 第10回(リストボックス複数選択)
・ユーザーフォーム 第11回(タブストップ)
・ユーザーフォーム 第12回(スピンボタン)