VBAでのテキストボックス(TextBox)の使い方とプロパティおよびイベント

Excel VBA からテキストボックス(TextBox)コントロールを利用する方法です。テキストボックスはユーザーにテキストを入力してもらうための入力エリアを提供する場合に使用されるコントロールです。ここでは Excel のユーザーフォームで設置できるテキストボックスを VBA から使用する方法と、テキストボックスで設定可能なプロパティおよびイベントの一覧について解説します。

(Last modified: )

テキストボックスのプロパティ一覧

ユーザーフォームに設置するテキストボックスで利用可能なプロパティ一覧は次の通りです。

AutoSize
AutoTab
AutoWordSelect
BackColor
BackStyle
BorderColor
BorderStyle
ControlSource
ControlTipText
DragBehavior
Enabled
EnterFieldBehavior
EnterKeyBehavior
Font
ForeColor
Height
HelpContextID
HodeSelection
IMEMode
IntegralHeight
Left
Locked
MaxLength
MouseIcon
MousePointer
MultiLine
PasswordChar
ScrollBars
SelectionMargin
SpecialEffect
TabIndex
TabKeyBehavior
TabStop
Tag
Text
TextAlign
Top
Value
Visible
Width
WordWrap

テキストボックスの既定のプロパティは Value プロパティです。

いくつかのプロパティについてはこのあと簡単に解説します。

テキストボックスに入力されたテキストを取得する(Text)

テキストボックスの初期値としてテキストを設定したり、テキストボックスに入力されたテキストを取得するには Text プロパティに値を設定または取得します。

テキストボックスの初期値を設定するには次のように記述します。

オブジェクト.Text [= String ]

テキストボックスに表示する文字列を代入してください。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、テキストボックスに初期値のテキストを設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    TextBox1.Text = "名前を入力"
End Sub

テキストボックスに入力されたテキストを取得する(Text)(1)

テキストボックスに入力されたテキストを取得する(Text)(2)

ユーザーフォームを表示すると、表示されたテキストボックスに指定した文字列が表示されているのが確認できます。

テキストボックスに入力されたテキストを取得する(Text)(3)

入力された文字列を取得する

またテキストボックスに入力された文字列を取得するには Text プロパティの値を参照されてください。例えばコマンドボタンがクリックされると、テキストボックスに入力された文字列を取得してメッセージボックスで表示するには次のように記述します。

Option Explicit

Private Sub CommandButton1_Click()
    MsgBox TextBox1.Text
End Sub

テキストボックスに入力されたテキストを取得する(Text)(4)

ユーザーフォームを表示し、表示されたテキストボックスに文字列を入力したあとでコマンドボタンをクリックしてください。入力した文字列を取得しメッセージボックスで表示します。

テキストボックスに入力されたテキストを取得する(Text)(5)

テキストボックスに入力されたテキストを取得する(Text)(6)

テキストボックスのIMEモードを設定する(IMEMode)

テキストボックスにフォーカスが移動したときに、日本語入力方式(IME)を指定したモードに変更するには IMEMode プロパティに値を設定します。

オブジェクト.IMEMode [= fmIMEMode ]

設定可能な値には次の種類があります。

定数説明
fmIMEModeNoControl0IME を制御しない
fmIMEModeOn1IMEをオンにする
fmIMEModeOff2IMEをオフにする(英語モード)
fmIMEModeDisable3IMEをオフにする(キーボードでIMEをオンにできない)
fmIMEModeHiragana4全角ひらがなモードでIMEをオンにする
fmIMEModeKatakana5全角カタカナモードでIMEをオンにする
fmIMEModeKatakanaHalf6半角カタカナモードでIMEをオンにする
fmIMEModeAlphaFull7全角英数字モードでIMEをオンにする
fmIMEModeAlpha8半角英数字モードでIMEをオンにする
fmIMEModeHangulFull9全角ハングルモードでIMEをオンにする
fmIMEModeHangul10半角ハングルモードでIMEをオンにする

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、テキストボックスの IME モードを「全角ひらがなモード」に設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    TextBox1.IMEMode = fmIMEModeHiragana
End Sub

テキストボックスのIMEモードを設定する(IMEMode)(1)

テキストボックスのIMEモードを設定する(IMEMode)(2)

ユーザーフォームを表示し、表示されたテキストボックスにフォーカスを移すと、 IME が「全角ひらがなモード」に設定されることが確認できます。

テキストボックスのIMEモードを設定する(IMEMode)(3)

テキストボックスのIMEモードを設定する(IMEMode)(4)

テキストボックスの水平方法の揃え方を設定する(TextAlign)

テキストボックスに表示されるテキストの水平方向の揃え方を設定するには TextAlign プロパティに値を設定します。

オブジェクト.TextAlign [= fmTextAlign ]

設定可能な値には次の種類があります。

定数説明
fmTextAlignLeft1左揃え
fmTextAlignCenter2中央揃え
fmTextAlignRight3右揃え

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、テキストボックスの水平方向の揃え方を右揃えに設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    TextBox1.TextAlign = fmTextAlignRight
End Sub

テキストボックスの水平方法の揃え方を設定する(TextAlign)(1)

テキストボックスの水平方法の揃え方を設定する(TextAlign)(2)

ユーザーフォームを表示すると、テキストボックスの水平方向の揃え方が右揃えになっているのが確認できます。

テキストボックスの水平方法の揃え方を設定する(TextAlign)(3)

テキストボックスに入力できる最大文字数を設定する(MaxLength)

テキストボックスに入力できる最大文字数を設定するするには MaxLength プロパティを使用します。

オブジェクト.MaxLength [= Long ]

対象のオブジェクトの MaxLength プロパティに対して最大文字数を表す長整数型の値を代入します。なお単位は文字です。半角文字でも全角文字でも同じ扱いとなります。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、入力可能な最大文字数を 5 に設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    TextBox1.MaxLength = 5
End Sub

テキストボックスに入力できる最大文字数を設定する(MaxLength)(1)

テキストボックスに入力できる最大文字数を設定する(MaxLength)(2)

ユーザーフォームを表示すると、表示されたテキストボックスには最大でも 5 文字までしかテキストを入力できないのが確認できます。なお単位は文字数なので半角文字でも全角文字でも 5 文字まで入力できます。

テキストボックスに入力できる最大文字数を設定する(MaxLength)(3)

テキストボックスに入力できる最大文字数を設定する(MaxLength)(4)

テキストボックスの表示位置を設定する(Top,Left)

テキストボックスが表示される位置を設定するには Top プロパティと Left プロパティに値を設定します。

オブジェクト.Top [= Single ]
オブジェクト.Left [= Single ]

Top プロパティにはユーザーフォームの上端からテキストボックスの上端までの距離、 Left プロパティにはユーザーフォームの左端からテキストボックスの左端までの距離をそれぞれ単精度浮動小数点型の数値で代入します。単位はポイントです。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、テキストボックスの位置を設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    TextBox1.Top = 100
    TextBox1.Left = 80
End Sub

テキストボックスの表示位置を設定する(Top,Left)(1)

テキストボックスの表示位置を設定する(Top,Left)(2)

ユーザーフォームを表示すると、表示されたテキストボックスが指定した位置で表示されているのが確認できます。

テキストボックスの表示位置を設定する(Top,Left)(3)

テキストボックスの幅と高さを設定する(Width,Height)

テキストボックスの幅と高さを設定するには幅については Width プロパティ、高さについては Height プロパティに値を設定します。

オブジェクト.Width [= Single ]
オブジェクト.Height [= Single ]

幅および高さをあらわす単精度浮動小数点型の数値を代入してください。単位はポイントです。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、テキストボックスの幅と高さを設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    TextBox1.Width = 170
    TextBox1.Height = 70
End Sub

テキストボックスの幅と高さを設定する(Width,Height)(1)

テキストボックスの幅と高さを設定する(Width,Height)(2)

ユーザーフォームを表示すると、表示されたテキストボックスの幅および高さが指定した値に設定されているのが確認できます。

テキストボックスの幅と高さを設定する(Width,Height)(3)

テキストボックスの幅で折り返すかどうか設定する(WordWrap)

テキストボックスの幅を超える長さのテキストを入力したときに、テキストボックスの幅で自動的に折り返るかどうか設定するには WordWrap プロパティに値を設定します。

オブジェクト.WordWrap [= Boolean ]

True を設定すると自動で折り返されます。「False」を設定すると折り返されずにそのまま同じ行で入力されます。(なお WordWrap プロパティに「True」を設置して折り返しを有効にするには、このあとで解説する MultiLine プロパティが「True」である必要があります)。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、自動で折り返すように設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    TextBox1.WordWrap = True
End Sub

テキストボックスの幅で折り返すかどうか設定する(WordWrap)(1)

テキストボックスの幅で折り返すかどうか設定する(WordWrap)(2)

ユーザーフォームを表示し、表示されたテキストボックスに幅を超える長さのテキストを入力すると、テキストボックスの幅で自動的に折り返されて表示されているのが確認できます。

テキストボックスの幅で折り返すかどうか設定する(WordWrap)(3)

なお WordWrap プロパティに「False」を設定して同じテキストを入力してみると、テキストボックスの幅で折り返されずにそのまま同じ行で表示されます。

Option Explicit

Private Sub UserForm_Initialize()
    TextBox1.WordWrap = False
End Sub

テキストボックスの幅で折り返すかどうか設定する(WordWrap)(4)

テキストボックスの幅で折り返すかどうか設定する(WordWrap)(5)

テキストボックスで複数行の入力を許可する(MultiLine)

テキストボックスの入力画面で改行文字を入力して複数行の入力を許可するには MultiLine プロパティに値を設定します。

オブジェクト.MultiLine [= Boolean ]

True を設定すると改行文字の入力が可能となり複数行の入力が行えます。「False」を設定すると複数行の入力が行えなくなります。(テキストボックス内で改行するには Shift + Enter キーを押します)。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、複数行の入力を許可しています。

Option Explicit

Private Sub UserForm_Initialize()
    TextBox1.MultiLine = True
End Sub

テキストボックスで複数行の入力を許可する(MultiLine)(1)

テキストボックスで複数行の入力を許可する(MultiLine)(2)

ユーザーフォームを表示し、表示されたテキストボックスに入力したテキストの途中で改行を行うと、改行されて次の行から入力できるようになっているのが確認できます。

テキストボックスで複数行の入力を許可する(MultiLine)(2)

なお MultiLine プロパティに「False」を設定すると、改行のためのキーを押しても改行されません。

テキストボックスにスクロールバーを表示する(ScrollBars)

テキストボックスで、テキストボックスの幅に収まらない長さのテキストを入力した場合や、テキストボックスの高さに収まらない長さのテキストを入力した場合にスクロールバーを表示するかどうか設定するには ScrollBars プロパティに値を設定します。

オブジェクト.ScrollBars [= fmScrollBars ]

設定可能な値には次の種類があります。

定数説明
fmScrollBarsNone0スクロールバーを表示しない
fmScrollBarsHorizontal1水平スクロールバーを表示する
fmScrollBarsVertical2垂直スクロールバーを表示する
fmScrollBarsBoth3水平と垂直の両方のスクロールバーを表示する

例えば垂直スクロールバーだけを表示するように設定するには ScrollBars プロパティに fmScrollBarsVertical を設定します。なお水平および垂直スクロールバーは必要になったときにだけ表示されます。

具体的には次のように記述します。下記ではユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャにコードを記述し、必要になったときに垂直スクロールバーが表示されるように設定しています。

Option Explicit

Private Sub UserForm_Initialize()
    TextBox1.MultiLine = True
    TextBox1.ScrollBars = fmScrollBarsVertical
End Sub

テキストボックスにスクロールバーを表示する(ScrollBars)(1)

テキストボックスにスクロールバーを表示する(ScrollBars)(2)

ユーザーフォームを表示し、表示されたテキストボックスに入力したテキストの途中で改行を行っていくと、テキストボックスの高さに収まらなくなった時点で垂直スクロールバーが表示されるのが確認できます。

テキストボックスにスクロールバーを表示する(ScrollBars)(3)

テキストボックスにスクロールバーを表示する(ScrollBars)(4)

テキストボックスのイベント一覧

テキストボックスで発生するイベント一覧は次の通りです。

AfterUpdate
BeforeDragOver
BeforeDropOrPaste
BeforeUpdate
Change
DblClick
DropButtonClick
Enter
Error
Exit
KeyDown
KeyPress
KeyUp
MouseDown
MouseMove
MouseUp

テキストボックスの既定のイベントは Change イベントです。

-- --

Excel のユーザーフォームで設置できるテキストボックスを VBA から使用する方法と、テキストボックスで設定可能なプロパティおよびイベントの一覧について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。