ユーザーフォーム 第4回

ユーザーフォーム

テキストボックスの使い方

 テキストボックスはユーザーフォームでよく使われる部品です。
 注意したいのは、Excelのセルと同様には使えないということです。

 テキストボックスは、数値や日付なども文字列として扱います。
 シート上のセルから値を受け取ったり、代入する時は自動変換などに注意が必要です。

サンプルの準備

 これまでと同じですが、ユーザーフォームの他に標準モジュールを使います。
 標準モジュールには、以下のコードを書いてユーザーフォームを開く処理を書きます。

Sub macro()
    UserForm1.Show
End Sub

 ユーザーフォームの方は、コマンドボタンを1つ配置し、キャプションを「OK」にします。
 初期化の Initialize は今回は使用しません。

’コマンドボタンクリック
Private Sub CommandButton1_Click()
    Unload Me
End Sub

テキストボックスを配置

 テキストボックスはツールボックスを使って配置します。


 配置出来たら必要に応じてオブジェクト名を変更しますが、今回はTextBox1のままにします。

主要なプロパティ

 続いて必要なプロパティ値を変更しますが、ここでは主要なプロパティを挙げておきます。

Font プロパティ

 文字列のフォントを指定するプロパティです。ダイアログで変更できます。

IMEMode プロパティ

 IMEモードの半角・全角などの指定を設定できます。

TextArigin プロパティ

 右寄せ、中央寄せ、左寄せなどが指定できます。

 尚、セルとは異なり、上下の位置調整や縦書きなどには対応していません。

テキストボックスに値をセットする

 プロパティに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は、テキストボックスの入力内容が確定する前に呼び出されるイベントプロシージャなので、ここで判定処理を通します。
 もし、制限をかけたい時には、引数の CancelTrue を返せば、入力内容の確定はキャンセルされテキストボックスにカーソルが戻ります。

 サンプルとして半角数字のみを入力させたい時の処理を示します。
 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

テキストボックスのまとめ

・テキストボックスは文字列型を扱うコントロール。
・主要なプロパティとしては、FontIMEModeTextArigin などがあります。
・セルや変数に代入する時は文字列型であることに注意。
・入力内容に制限をかけたい時は、BeforeUpdateイベントを使います。

タイトルとURLをコピーしました