← コード一覧へ戻る
実務UserForm

テキストボックスに入力できる文字数を制限する(2):確定前の検証

UserFormのTextBoxをBeforeUpdateで検証し、6文字以上ならTab移動を止めます。5文字へ修正して移動できるまでを試します。

実行前に確認

  • 「移動先」ボタンはTab移動を試すための部品で、クリックしても保存処理はありません。空欄も禁止したい場合は、文字数の上限とは別に必須入力の検証が必要です。
  • TabIndexは0から始まる移動順、TabStopはTabキーで移動先にできるかの設定です。この例はTextBox1→CommandButton1の順をコードで指定しています。
  • 入力途中は6文字以上も打てます。フォーカス移動前に5文字以内であることを検証する方式です。
  • フォームの×や強制終了による終了まで防ぐ保存検証ではありません。実運用では保存ボタン側でも同じ条件を検証します。
  • 添付目次の番号に対応させた独自の実装例です。書籍本文の方法を再現・確認したものではありません。
  • コードと公式仕様を照合した学習用の例です。Excel実機での実行確認は行っていません。

1サンプルコード

'【貼付先:UserForm1 のコードモジュール】
Option Explicit

Private Sub UserForm_Initialize()
    Me.Width = 360
    Me.Label1.AutoSize = True
    Me.TextBox1.MaxLength = 0
    Me.TextBox1.TabIndex = 0
    Me.TextBox1.TabStop = True
    Me.CommandButton1.TabIndex = 1
    Me.CommandButton1.TabStop = True
    Me.CommandButton1.Caption = "移動先"
    Me.Label1.Caption = "5文字以内で入力してください。"
End Sub

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If Len(CStr(Me.TextBox1.Value)) > 5 Then
        Cancel = True
        Me.Label1.Caption = "6文字以上です。5文字以内へ修正してください。"
    Else
        Me.Label1.Caption = "入力は5文字以内です。"
    End If
End Sub

図で見る確定する前に検証

イメージ図

UserFormのTextBoxをBeforeUpdateで検証し、6文字以上ならTab移動を止めます。5文字へ修正して移動できるまでを試します。

  1. 入力:6文字

    TextBox1へ123456を入れ、Tabを押す

  2. 検証:6 > 5

    BeforeUpdateでLenを調べ、Cancel=Trueにする

  3. 結果:移動しない

    TextBox1にフォーカスが残り、Label1に警告が出る

  4. 修正:5文字

    末尾の6を削除し、12345にしてTabを押す

  5. 結果:移動できる

    5文字以内と表示され、「移動先」ボタンへフォーカスが移る

文字は自動で切り捨てません。空欄は0文字として許可します。このボタンに保存機能はなく、入力を確定できるかを試す例です。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する6つの手順で、コードの使い方を確認できます
  1. 1

    Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[ユーザーフォーム]で、名前がUserForm1の空のフォームを用意します。各例は別々に試します。

  2. 2

    ツールボックスからTextBox、Label、CommandButtonを各1個、フォーム本体へ重ならないように置きます。各[(Name)]をTextBox1、Label1、CommandButton1にします。Frameなどの中には置きません。

  3. 3

    UserForm1を右クリック→[コードの表示]を開き、掲載コード全体をフォームのコードモジュールへ貼り付けます。標準モジュールには貼り付けません。

  4. 4

    VBEでUserForm1を選び、F5で表示します。TextBox1をクリックして「123456」と入力し、Tabキーを押します。入力欄にカーソルが残り、Label1に警告が出ることを確認します。

  5. 5

    末尾の「6」を削除して「12345」に直し、もう一度Tabを押します。「入力は5文字以内です。」と表示され、フォーカス(キー操作の対象)が「移動先」ボタンへ移ります。

  6. 6

    TextBox1を再びクリックし、全ての文字を削除してからTabを押します。空欄は0文字なので、この例では移動できます。

使っている機能の公式ドキュメント(Microsoft Learn)