教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA フォーム&コントロール】数字だけが入力可能なテキストボックスを作成する方法を教えて!

構文

数字だけが入力可能なテキストボックスを作成するには、UserFormを使用します。UserFormは、VBAで簡単にGUI(グラフィカル・ユーザー・インターフェース)を作成するためのオブジェクトです。

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then
        KeyAscii = 0
    End If
End Sub

解説

上記のコードは、テキストボックスにキーが押された際に発生するKeyPressイベントに対する処理です。この中で、IsNumeric関数を使って入力が数字かどうかを判定し、数字でない場合かつBackspaceキー(キーコード8)でない場合には、キー入力を無効にします。

使い方

具体的な使い方を紹介します。

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    ' 数字以外の入力を無効化
    If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then
        KeyAscii = 0
    End If
    ' 偶数以外の数字を無効化
    If IsNumeric(Chr(KeyAscii)) Then
        If CInt(Chr(KeyAscii)) Mod 2 <> 0 Then
            KeyAscii = 0
        End If
    End If
End Sub

このプログラムは、偶数のみを入力許可する内容となります。TextBox1 に対する KeyPress イベントを使用し、入力されたキーが数字でない場合や、入力された数字が偶数でない場合には、その入力を無効化しています。これにより、ユーザーが奇数を入力しようとした場合、その入力は無視され、テキストボックスには偶数のみが入力されるようになります。このように、KeyPress イベントを活用することで、ユーザーが入力するデータに対して柔軟かつ細かい制御が可能です。

プログラミング例

以下に、プログラミング例を紹介します。

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    ' 数字以外の入力を無効化
    If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then
        KeyAscii = 0
    End If
End Sub

Private Sub CommandButton1_Click()
    Dim height As Double
    ' テキストボックスから身長を取得
    height = CDbl(TextBox1.Value)
    ' 身長に関する処理を実行
    If height < 100 Then
        MsgBox "身長が短すぎます。"
    ElseIf height > 200 Then
        MsgBox "身長が高すぎます。"
    Else
        MsgBox "入力された身長は正常です。"
    End If
End Sub

このサンプルでは、入力制限を利用して身長の入力をさせます。TextBox1に対するKeyPressイベントを利用して、数字以外の入力を無効化しています。その後、身長の入力があった場合、正常な範囲かどうかを判定してメッセージボックスで表示します。

まとめ

数字だけが入力可能なテキストボックスを作成することは、簡単かつ効果的です。この手法を学び、是非活用してください。