ユーザーフォーム入門
数値専用のテキストボックス

Excelマクロのユーザーフォームの基礎、エクセルVBAの入門解説
公開日:2013年5月以前 最終更新日:2024-02-25

第19回.数値専用のテキストボックス


ユーザーフォーム入門として基礎から解説します。
数値専用のテキストボックスの作成です。
数字以外は入力出来ないテキストボックスを作成します。


数値専用のテキストボックスの追加

以下のように金額のテキストボックスを追加します。

VBA マクロ ユーザーフォーム 数値テキスト

オブジェクト名は、txt金額とします。

KeyDownイベントで数値のみに限定

Private Sub txt金額_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  Select Case KeyCode
    Case vbKeyReturn, vbKeyBack, vbKeyDelete, vbKeyTab
    Case vbKey0, vbKey1, vbKey2, vbKey3, vbKey4, vbKey5, vbKey6, vbKey7, vbKey8, vbKey9
    Case vbKeyNumpad0, vbKeyNumpad1, vbKeyNumpad2, vbKeyNumpad3, vbKeyNumpad4, vbKeyNumpad5, vbKeyNumpad6, vbKeyNumpad7, vbKeyNumpad8, vbKeyNumpad9
    Case vbKeyLeft, vbKeyUp, vbKeyRight, vbKeyDown
    Case 188 '「,」カンマ
    Case Else
      KeyCode = 0
  End Select
End Sub

数字のみ入力可能なテキストボックスになります。
数字以外では、EnterキーやBackSpaceキー、そしてカンマ等々を入力できるようにしておきます。

数字キーは、
vbKey0~vbKey9と、vbKeyNumpad0~vbKeyNumpad9
この両方を入れるのを忘れないようにして下さい。
vbKeyNumpadは、テンキーからの入力になります。

Keycode 定数 一覧

数値専用テキストボックスをカンマ編集

数値を読みやすいようらカンマ編集します。

まずは、テキストボックスに入った時点では、カンマを削除した状態にして、
テキストボックスを抜けた時にカンマ編集してみましょう。

Private Sub txt金額_Enter()
  Call setColor(Me.txt金額)
  If IsNumeric(Me.txt金額.Text) Then
    Me.txt金額.Text = Format(Me.txt金額.Text, "0")
  End If
End Sub

Private Sub txt金額_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  If Me.txt金額.Text = "" Then
    Exit Sub
  End If
  If IsNumeric(Me.txt金額.Text) Then
    Me.txt金額.Text = Format(Me.txt金額.Text, "#,##0")
  Else
    MsgBox "数値を入力して下さい。"
    Cancel = True
  End If
End Sub

Exitイベントでは、数値以外の場合は、抜けないようにしています。
Cancel = True
これで、テキストボックスを抜けないようにしています。

If Me.txt金額.Text = "" Then
  Exit Sub
End If
これが無いと、何も入力していない状態でもテキストボックスを出られなくなってしまいます。
入力必須項目であっても、ここは一旦は、未入力を許可しておい方が使い勝手が良いでしょう。
必須入力のチェックは、OKボタンが押された時点でチェックするようにしたほうが良いです。

Changeイベントで電卓風に

別の方法で、数字を入力している途中で、カンマを自動挿入してみましょう。
電卓の数値入力のような感じになります。

Private Sub txt金額_Change()
  If IsNumeric(Me.txt金額.Text) Then
    Me.txt金額.Text = Format(Me.txt金額.Text, "#,##0")
  End If
End Sub

これで、数値を入力していくと、3桁ごとに自動でカンマが付くようになります。
ここは、好みで使い分ければ良いと思います。
イベントの使い方によって、いろいろな表現方法ができますので、工夫していろいろ試してみてください。



同じテーマ「ユーザーフォーム入門」の記事

第16回.アクティブコントロールに色を付ける

・フォームモジュール ・EnterイベントとExitイベントをセットで使う方法 ・対応するラベルのフォントを太字にする
第17回.Enterキーで次のコントロールに移動する
・ユーザーフォームでのEnterキー動作について ・KeyDownイベント ・KeyPressイベント
第18回.2段階のコンボボックス
・ワークシートの用意 ・2段階コンボボックスの追加 ・2段階コンボボックスの処理概要 ・ユーザーフォームのInitializeイベント ・コンボボックスのChangeイベント
第19回.数値専用のテキストボックス
第20回.テキストボックスの各種イベント
・テキストボックスのイベント一覧 ・イベントの発生順序 ・KeyDown と KeyPress の違いについて
第21回.ユーザーフォームの各種イベント
・ユーザーフォームのイベント一覧 ・QueryCloseの引数 ・イベントの発生順について
第22回.コントロールの動的作成
・コントロールの動的作成の動作説明 ・コントロールの表示/非表示を切り替える ・動的に部品コントロールを追加/削除する ・コントロールの動的作成の最後に
第23回.イベントプロシージャーの共通化
・サンプルのユーザーフォーム ・イベントプロシージャーの共通化のVBA ・イベントプロシージャーの共通化の問題点 ・イベントプロシージャーの共通化の雛形VBA ・イベントプロシージャーの共通化の最後に
第24回.イベントプロシージャーの共通化(Enter,Exit)
・イベントプロシージャーの共通化の問題点 ・問題解決した経緯 ・API:ConnectToConnectionPointについて ・ConnectToConnectionPointの使用例 ・イベントと対応するVB_UserMemIdの一覧とインポート用雛形 ・イベントプロシージャーの共通化の最後に
第25回.簡易音楽プレーヤーの作成
・ユーザーフォーム ・フォームモジュール ・標準モジュールでの使用例 ・簡易音楽プレーヤーの最後に
第26回.プログレスバーを自作する
・ユーザーフォームの作成 ・ユーザーフォームのVBAコード ・プログレスバーの使用方法1:中断不可 ・プログレスバーの使用方法2:中断許可 ・プログレスバー自作の最後に


新着記事NEW ・・・新着記事一覧を見る

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ