2つのテキストボックスの値の和を別のテキストボックスに表示するには?

(テキストボックスに入力した値を数値として扱うには?)
Question 51.2 Previous Next
A氏より   (2001.12.3)
ユーザーフォームを作成中です。
フォーム内のテキストBOX1の数字(例 30)と、テキストBOX2(例 20)を足してテキストBOX3に表示したい(例 50)のに、結果は 3020となってしまう。どうしたらいいの??
変数を使ってInterger指定にしたり、兎に角、いろいろやってみたが完成できません。ご指導ください。

B氏より   (2001.12.28)
ユーザーフォームを使用してデータベースに入力をするマクロを作りたいのですが、テキストボックスに数値を入力した場合、セルに反映させると数字が文字列として認識されてしまいます。どうすれば数値として認識させることが出来るでしょうか? よろしくお願いします。
Answer   Copyright (C) 2001.12.3 永井善王
下図のようなユーザーフォームを作成したいのですね。
入力用ユーザーフォーム
テキストボックス3に 3020と表示されたとするとマクロコードに、
     TextBox3.Text = TextBox1.Text + TextBox2.Text
または、
TextBox3.Value = TextBox1.Value + TextBox2.Value
と書かれているのでしょうか。

「Text」という英語を日本では、一般的に 「テキスト」 つまり 「テキストブック=教科書、等」 という意味で馴染んでいます。 そのため 「テキストボックス」 という用語の意味合いを、常識的には理解しにくいかと思います。
Excelおよび VBAの世界では、「テキスト」 とは 「文字列」 を意味します。
   文字列 … 英数字・かな漢字・記号・符号など(数字も含む)
   数値  … 数字および、基数を示すプリフィックス(後述)

例えば、文字列の 123 と、数値の 123 とがどう違うかというと、加減乗除など日常的な演算に使えるのは「数値」の方です。 「+」記号は文字列どうしを連結する場合にも使います(注)が、足し算するわけではありません。単純にある文字列と他の文字列をつないで新しい文字列を作り出します。

前置きが長くなりますので詳しいことは別途自習することにして、ここでは、
テキストボックスで入力された値は文字列であり数値とは異なる、ということを理解しておきましょう。
(注)連結演算子に「+」記号を使うと Excelのバージョンによってはエラーになる場合があるので 「&」の使用を推奨
テキストボックスの値の操作
Textプロパティを使えば、テキストボックスコントロールに
文字列を設定したり、値を取得したりできます。Textプロパティに設定した値は、Valueプロパティにも設定されます。 Valueプロパティは、テキストボックスコントロールの内容を設定します。内容を取得することも可能です。
よって、文字列の "30" と "20" とを +(連結)すると答は、"3020" になります。
数値の 30 と 20 を足し算した和 50 を得るためには、テキストボックスの文字列を数値に変換することが必要です。

Val関数
この関数は、指定した文字列に含まれる数値を適切なデータ型に変換してくれます。
構文は簡単で、
Value(任意の文字列式) と書きます。
注意点としては、文字列中に数字以外の文字が混ざっていると読み込みが中止されます。そのため、\ や , などの混入は許されません。ただし、基数を示すプリフィックス &O (8進数) や &H (16進数) は認識され、スペース、タブ、ラインフィードは無視されます。

テキストボックスの値を数値として演算する
上記のマクロコードに Val関数を書き加えて、次のように完成させてみました。このマクロはユーザーが、テキストボックスで入力中に [Tab]または[Enter]キーを押したときに動作するユーザーフォームのイベントマクロです。
'------------------------------------------------------------------------------
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text)
End Sub
'------------------------------------------------------------------------------
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text)
End Sub
'------------------------------------------------------------------------------
サンプルブックのダウンロードは ここをクリック (YNxv9g0222_TextBox_Text.xls 46KB)
※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。

 

Excel VBA Macro