テキストボックスで数値を3桁区切りにするには?

Question 25.1 Previous Next
VBAのフォーム上で数値を 3桁区切りにしたい場合は、どうすればよろしいのでしょうか? Excel2000を使っています。
まだVBAを始めたばかりなので、質問自体が間違っていたら、お許し下さい。
Answer   Copyright (C) 2000.2.17 永井善王
フォームとは、①ユーザーフォームのことでしょうか。それとも[データ]メニューにある ②データ入力用の[フォーム]のことでしょうか?
もしも②のことでしたら、申し訳ないですが私にはわかりません。

オートフォーカス また、「数値を3桁区切りにする」とは、(A) 3桁ごとにコンマを挿入して編集する ことなのか、或いは、 パソコンにソフトウェアをインストールするときに、しばしば見かけるCDキーの入力画面(左図)のように、 (B) 3桁ごとに区切られた入力画面 のことでしょうか?

もしも、このCDキーの入力画面イメージで良いのでしたら、こちら を参考にしてください。

それでは、ユーザーフォームのテキストボックスで入力された数値を、(A) 3桁ごとにコンマを挿入して編集する 方法を考えてみましょう。
ユーザーフォーム
この方法についても私は知りませんので、左図のとおりユーザーフォームにテキストボックスを設けて、 試行錯誤してみます。

TextBox1が「会員№」でコンマなし、
TextBox2が「権利金」で金額ですからコンマありにしましょう。(左図のコンマはキーボードから入力しました)

テキストボックスのプロパティは多数あって、きめ細かい設定が可能ですが、コンマ編集してくれるプロパティは見当たりません。 よって自分で、テキストボックスのデータが変更されたときに発生するイベントを利用して、マクロを組むことになるかと思います。 では早速、組んでみましょう。

1. データが変更されたときに発生するイベントは、BeforeUpdateイベントで、次のとおりです。
    Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
2. テキストボックスに入力された値を取り出すためのマクロは、
    入力値 = TextBox2.Value
3. コンマ編集のマクロは、Format関数を使って、
    編集値 = Format(入力値, "###,###")
4. 編集後の値をテキストボックスに設定するマクロは、次のように書けばよいでしょう。
    TextBox2.Value = 編集値
まとめると下記のようになります。そして、これをユーザーフォームのコードに記入しておきます。
Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    入力値 = TextBox2.Value                     'テキストボックスの値を取り出す
    編集値 = Format(入力値, "###,###")          'コンマ編集する
    TextBox2.Value = 編集値                     'テキストボックスへ値をセットする
End Sub
school できました。キーボードから数字だけを入力するとマクロが動いて、コンマ編集した結果が表示されます。
5~6桁の数字を入力する場合は、コンマがなくても、それほど読みにくくはないかと思います。しかし、10億、100億と桁数が多くなってくると、 コンマがあった方が断然見やすくなり、入力ミスも防げるでしょう。
マクロを組む甲斐がありますね。

サンプルブックのダウンロードは ここをクリック  (YNxv9836_BeforeUpdate.xls 59KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

 

Excel VBA Macro