Excel VBA ユーザーフォームにテキストボックスの追加と詳細設定する方法

コントロール作成/操作

ユーザーフォームにテキストボックス(TextBox)を追加する方法と詳細設定の方法をご説明します。

テキストボックスは文字列や数値を入力、表示する場合に使用します。
また、入力、表示されている値の取得や変更が可能です。

そのため使用頻度の高いコントロールかと思います。

追加するにはツールボックスから追加する方法と、VBAから追加する方法がありますので、順にご説明します。

また、サンプルコードではループを使用して複数のコントロールの追加や、設置済みのテキストボックスを取得して詳細設定するサンプルコードも記載したいと思います。

その他のコントロールの操作については下記記事をご覧ください。

1.ツールボックスでテキストボックスを追加する

まずは、ツールボックスでテキストボックスを追加する方法です。

ユーザーフォームの作成がまだの方は、VBE→挿入タブ→ユーザーフォームを選択してUserFormを作成してください。

ツールボックスが表示されていない方は、メニューの実行ボタンや停止ボタンの並びにあるツールボックスボタンをクリックしてください。

もしくは表示タブのツールボックスを選択する事で表示出来ます。

ツールボックスの「ab」というアイコンがテキストボックスですので、選択します。

選択したら、ユーザーフォーム上の設置したい位置でユーザーフォームをクリックします。

すると下記図のように、テキストボックスが追加されます。

2.プロパティウィンドウで詳細設定する

テキストボックスを大まかな位置に設置したら、次はプロパティウィンドウで詳細設定をします。

詳細設定と言ってもプロパティの種類が多すぎますので、一覧で簡単に説明します。

プロパティ一覧

定数の説明があるプロパティは赤字になっています。

プロパティ名説明
オブジェクト名コントロールの名前を指定します。
AutoSize文字列に合わせて文字列の表示領域を自動で調整するか指定します。
AutoTabMaxLengthに設定された入力できる最大文字数が入力されたとき、
フォーカスを自動的に次のコントロールに移動するか指定します。
AutoWordSelect入力されている文字列をダブルクリックした場合に、
選択範囲を単語単位かすべての文字列にするか指定します。
BackColor背景色をシステムまたは、カラーパレットで指定します。
BackStyle背景のスタイルを指定します。
BorderColor枠線の色をシステムまたは、カラーパレットで指定します。
BorderStyle枠線のスタイルを指定します。
ControlSourceリンクさせるセルのアドレスを指定します。
ControlTipTextマウスポインターを上に置いたとき、表示する文字列を指定します。
DragBehaviorドラッグ&ドロップを許可するか指定します。
Enabledイベントに対応するか指定します。
EnterFieldBehaviorフォーカスされた場合に文字列を選択するか指定します。
EnterKeyBehaviorテキストボックスでEnterを押した場合の動作を指定します。
Font文字列のフォントの種類やサイズを指定します。
ForeColor文字列の色を指定します。
Height高さを指定します。
HideSelectionフォーカスが外れた際に選択されているテキストが強調されたままか指定します。
IMEMode日本語入力システムの実行モードを指定します。
IntegralHeightリストですべて、または一部のテキスト行のどちらを表示するか指定します。
Left位置をフォームの左端を0として、ポイント単位で指定します。
Lockedテキストボックスが編集できるか指定します。
MaxLength入力できる最大文字数を指定します。
MouseIconマウスポインターがテキストボックス上にあるときアイコンファイルを指定します。
MousePointerマウスポインターがテキストボックスに移動したとき、
表示されるポインターの種類を指定します。
MultiLine文字列を改行して複数行入力できるか指定します。
PasswordCharパスワード入力で使用する場合は隠し文字を指定します。
ScrollBarsスクロールバーの表示設定をします。
SelectionMargin文字列をワンクリックで選択可能にする、
左端余白の有効・無効を指定します。
SpecialEffectテキストボックスの表面の立体表示を指定します。
TabIndexテキストボックスにフォーカスをあてる順番を指定します。
TabKeyBehaviorテキストボックス上でTabキーを押した場合の動作を指定します。
TabStopTabIndexの有効/無効を指定します。
Text表示する文字列を指定します。
TextAlignテキストボックスの文字列の位置を指定します。
Top位置をフォームの上端を0としてポイント単位で指定します。
Value文字列を指定します。
Visible表示/非表示を切り替えます。
Width幅をポイント単位で指定します。
WordWrapテキストボックス内の文字列が幅を超えたときの折り返しを指定します。
BackStyleの定数一覧

fmBackStyleOpaque」が既定値となります。

定数名説明
fmBackStyleTransparent0背景を透明にします。
fmBackStyleOpaque1BackColor設定した色に背景を塗りつぶします。
BorderStyleの定数一覧

fmBorderStyleNone」が既定値となります。

定数名説明
fmBorderStyleNone0枠線を表示しません。
fmBorderStyleSingle1枠線を表示します。
DragBehaviorの定数一覧

fmDragBehaviorDisabled」が既定値となります。

定数名説明
fmDragBehaviorDisabled0ドラッグ&ドロップを許可しません。
fmDragBehaviorEnabled1ドラッグ&ドロップを許可します。
EnterFieldBehaviorの定数一覧

fmEnterFieldBehaviorSelectAll」が既定値となります。

定数名説明
fmEnterFieldBehaviorSelectAll0文字列をすべて選択します。(既定値)
FmEnterFieldBehaviorRecallSelection1文字列を選択しません。
IMEModeの定数一覧

fmIMEModeNoControl」が既定値となります。

定数名説明
fmIMEModeNoControl0IMEのモードを変更しません。
fmIMEModeOn1IMEをオンにします。
fmIMEModeOff2IMEをオフにして英語モードにします。
fmIMEModeDisable3IMEをオフにし、キー操作によってIMEをオンにできません。
fmIMEModeHiragana4全角ひらがなモードでIMEをオンにします。
fmIMEModeKatakana5全角カタカナモードでIMEをオンにします。
fmIMEModeKatakanaHalf6半角カタカナモードでIMEをオンにします。
fmIMEModeAlphaFull7全角英数モードでIMEをオンにします。
fmIMEModeAlpha8半角英数モードでIMEをオンにします。
MousePointerの定数一覧

fmMousePointerDefault」が既定値となります。

定数名内容
fmMousePointerDefault0標準ポインター
fmMousePointerArrow1矢印
fmMousePointerCross2十字ポインター
fmMousePointerIBeam3Iビーム
fmMousePointerSizeNESW6右上と左下を指し示す両端矢印
fmMousePointerSizeNS7上と下を指し示す両端矢印
fmMousePointerSizeNWSE8左上と右下を指し示す両端矢印
fmMousePointerSizeWE9左と右を指し示す両端矢印
fmMousePointerUpArrow10上向き矢印
fmMousePointerHourglass11砂時計
fmMousePointerNoDrop12ドラッグされているオブジェクトに重なった不可シンボル無効なターゲット。
fmMousePointerAppStarting13矢印と砂時計
fmMousePointerHelp14矢印と疑問符
fmMousePointerSizeAll15サイズ変更カーソル (上下左右を指し示す矢印)
fmMousePointerCustom99MouseIcon プロパティで指定されたアイコンを使用します。
ScrollBarsの定数一覧

fmScrollBarsNone」が既定値となります。

定数名説明
fmScrollBarsNone0スクロールバーを表示しません。
fmScrollBarsHorizontal1水平スクロールバーを表示します。
fmScrollBarsVertical2垂直スクロールバーを表示します。
fmScrollBarsBoth3水平・垂直スクロールバーの両方を表示します。
TextAlignの定数一覧

fmTextAlignLeft」が既定値となります。

定数名位置
fmTextAlignLeft1左揃え
fmTextAlignCenter2中央揃え
fmTextAlignRight3右揃え

3.VBAでテキストボックスを追加する方法

VBAでコントロールの追加は次のように記述します。

Set Object = UserForm1.Controls.Add("Forms.TextBox.1","コントロールの名前","オブジェクトの表示")

コントロールオブジェクトに「Addメソッド」で追加して操作します。

テキストボックスのコントロールIDは「Forms.TextBox.1」です。

コントロールの種類とコントロールの名前、オブジェクトの表示をTrue、Falseで指定します。

オブジェクトの表示」は省略可能で、省略した場合は既定値がTrueになります。

4.サンプルコード

テキストボックスを追加するサンプルコード

何も指定しないと左上にデフォルト設定の状態で追加されます。

また、テキストボックスを追加する際にオブジェクト名に、テキストコントロールと判定できるような名前に指定する事をおすすめします。

追加後にVBAでコントロールを特定する際に簡単になります。

Sub Sample1()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.TextBox.1", "MyText", True)
    
    .Show vbModeless

End With

End Sub

テキストボックスの詳細設定をするサンプルコード

Sub Sample2()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.TextBox.1", "MyText", True)
    
    With MyCtrl
        .Top = 24                           'Top位置
        .Left = 18                          'Left位置
        .Height = 20                        '高さ
        .Width = 100                        '幅
        .BorderStyle = fmBorderStyleSingle  '枠線
        .ForeColor = RGB(0, 0, 0)           '文字色
        .Font.Name = "メイリオ"             'テキストのスタイル
        .TextAlign = 2                      'テキストの位置
        .FontSize = 10                      'テキストのサイズ
        .IMEMode = fmIMEModeHiragana        'IMEをひらがなに指定する
        .TabIndex = 1
    End With

    .Show vbModeless

End With

End Sub

ループで複数のテキストボックスを追加するサンプルコード

Sub Sample3()

Dim MyCtrl  As Object
Dim i       As Long

With UserForm1

    For i = 1 To 5
    
        'テキストボックスの名前に番号を付ける
        Set MyCtrl = .Controls.Add("Forms.TextBox.1", "MyText" & i, True)
        
        With MyCtrl
            .Top = 24 * i                       'Top位置(表示位置を移動する)
            .Left = 18                          'Left位置
            .Height = 20                        '高さ
            .Width = 100                        '幅
            .BorderStyle = fmBorderStyleSingle  '枠線
            .ForeColor = RGB(0, 0, 0)           '文字色
            .Font.Name = "メイリオ"             'テキストのスタイル
            .TextAlign = 2                      'テキストの位置
            .FontSize = 10                      'テキストのサイズ
            .IMEMode = fmIMEModeHiragana        'IMEをひらがなに指定する
            .TabIndex = i                       'タブキーの移動の順番を指定する
        End With
    
    Next i
    
    .Show vbModeless

End With

End Sub

設置済みテキストボックスを取得して詳細設定するサンプルコード

今回はSample3のコードを使用して追加後に、取得して詳細設定を行います。

追加には「For Next」を使用していますが、取得には「For Each In Next」のループでコントロールを取得しています。

もちろん「For Next」でも取得可能です。

その場合はテキストボックスを取得するには「Controls(“コントロール名”)」で指定します。

Sub Sample4()

Dim MyCtrl  As Object
Dim i       As Long
Dim GetCtrl As Object

With UserForm1
    
    'テキストボックスを5個追加
    For i = 1 To 5
    
        'テキストボックスの名前に番号を付ける
        Set MyCtrl = .Controls.Add("Forms.TextBox.1", "MyText" & i, True)
            
    Next i
    
    .Show vbModeless
    
    'テキストボックスを取得して詳細設定する
    i = 1
    
    For Each GetCtrl In .Controls
        
        With GetCtrl
        
            If InStr(.Name, "MyText") <> 0 Then
                .Top = 24 * i                       'Top位置(表示位置を移動する)
                .Left = 18                          'Left位置
                .Height = 20                        '高さ
                .Width = 100                        '幅
                .BorderStyle = fmBorderStyleSingle  '枠線
                .ForeColor = RGB(0, 0, 0)           '文字色
                .Font.Name = "メイリオ"             'テキストのスタイル
                .TextAlign = 2                      'テキストの位置
                .FontSize = 10                      'テキストのサイズ
                .IMEMode = fmIMEModeHiragana        'IMEをひらがなに指定する
                .TabIndex = i                       'タブキーの移動の順番を指定する
            End If
            
            i = i + 1
        
        End With
        
    Next

End With

End Sub

設置済みテキストボックスのテキストの取得/入力するサンプルコード

テキストボックスを追加して文字列を入力する

せっかくなので、Sample3で使用したループで5個のテキストボックスを追加するコードを使用して、それぞれのテキストボックスにSample1~5の文字列を入力したいと思います。

Sub Sample5()

Dim MyCtrl  As Object
Dim i       As Long

With UserForm1

    For i = 1 To 5
    
        'テキストボックスの名前に番号を付ける
        Set MyCtrl = .Controls.Add("Forms.TextBox.1", "MyText" & i, True)
        
        With MyCtrl
            .Top = 24 * i                       'Top位置(表示位置を移動する)
            .Left = 18                          'Left位置
            .Height = 20                        '高さ
            .Width = 100                        '幅
            .BorderStyle = fmBorderStyleSingle  '枠線
            .ForeColor = RGB(0, 0, 0)           '文字色
            .Font.Name = "メイリオ"             'テキストのスタイル
            .TextAlign = 2                      'テキストの位置
            .FontSize = 10                      'テキストのサイズ
            .IMEMode = fmIMEModeHiragana        'IMEをひらがなに指定する
            .TabIndex = i                       'タブキーの移動の順番を指定する
            .Text = "Sample" & i
        End With
    
    Next i
    
    .Show vbModeless

End With

End Sub
テキストボックスに入力されている文字列を取得する
Sub Sample6()

Dim MyCtrl  As Object
Dim i       As Long
Dim GetCtrl As Object
Dim MyStr   As String

With UserForm1

    For i = 1 To 5
    
        'テキストボックスの名前に番号を付ける
        Set MyCtrl = .Controls.Add("Forms.TextBox.1", "MyText" & i, True)
        
        With MyCtrl
            .Top = 24 * i                       'Top位置(表示位置を移動する)
            .Left = 18                          'Left位置
            .Height = 20                        '高さ
            .Width = 100                        '幅
            .BorderStyle = fmBorderStyleSingle  '枠線
            .ForeColor = RGB(0, 0, 0)           '文字色
            .Font.Name = "メイリオ"             'テキストのスタイル
            .TextAlign = 2                      'テキストの位置
            .FontSize = 10                      'テキストのサイズ
            .IMEMode = fmIMEModeHiragana        'IMEをひらがなに指定する
            .TabIndex = i                       'タブキーの移動の順番を指定する
            .Text = "Sample" & i
        End With
    
    Next i
    
    .Show vbModeless
    
    'テキストボックスを取得して入力されているテキストを取得する
    i = 1
    
    For Each GetCtrl In .Controls
        
        With GetCtrl
        
            If InStr(.Name, "MyText") <> 0 Then
            
                MyStr = MyStr & vbCrLf & .Text
            
            End If
        
        End With
        
    Next
    
    MsgBox MyStr

End With

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