プロが教えるわが家の防犯対策術!

VBAのユーザーフォームのテキストボックスで
TextBox5.Value
TextBox5.text
の違いについて教えてください。


てっきり数値かストリングかの違いだと思っていたのですが

Private Sub TextBox5_Change()

ee = TextBox5.Value
dd = TextBox5.text

End Sub

というコードでテキストボックスにいろいろな値を入れて調べてみたのですが
valueもtextもストリングで値が格納されており、
両方とも数値、文字列をどちらとも扱えることが分かりました。

検索して調べてみたのですが
http://www.tsware.jp/study/vol16/vbabegin_32.htm

前者はそのコントロールからフォーカスが離れたときなどに確定した値です。
一方、後者は現在編集中のデータ内容(画面に表示されている内容)です。
編集中の場合にValueプロパティを取得しても、それは前回最後に確定したデータであって、
現在画面に表示されているものではありません。

このページによれば、
文字入力確定後の値がtextに格納されており
編集中の値がvalueに格納されているそうです。
それで、例えば「aaaa」と入力されている途中にカーソルを入れて
「aabaa」としてみました。
しかし、両方とも同じ値が代入されています。



http://officetanaka.net/excel/vba/tips/tips143.htm

このページにはボックスが空のときの扱いが異なるそうなのですが
「aaaa」をクリアしてみると
両方とも""という値が代入されています。

全く同じ挙動をしているように思えるのですが
どうやって使い分ければ良いのでしょうか?

どういうコードなら違いが見られますでしょうか?

A 回答 (2件)

しばらく調べてみました。

私も同様の疑問でした。

>全く同じ挙動をしているように思えるのですが
>どうやって使い分ければ良いのでしょうか?

Office Tanaka では、Value では、Null 値が現れるようなことが書かれていますが、TextBox において、両者は同じです。String型ですから、Null値が現れるはずがありません。

質問のリンク先の以下の内容は、あくまでも、Access の話です。
「テキストボックスへの入力内容を扱う場合には、「Value」プロパティと「Text」プロパティの違いに注意しなければなりません。前者は・・・フォーカスが離れたときなどに確定した値です。一方、後者は・・・現在編集中のデータ内容・・・現在画面に表示されているものではありません。 」

Excelでは、私には、その違いは見出されません。もしかしたら、PasswordChr に違いがあるかと思いましたが、それもありません。単に、VB6の名残りで使うつもりなら、.Textプロパティなんだろうか、というところだけです。同じだと解釈してよいのではないでしょうか。

あっ、それは別として、些細なことですが、その格納した変数のアドレスが違いますね。だから、何ということもありませんが。

Dim a, b
 a = VarPtr(TextBox1.Value)
 b = VarPtr(TextBox1.Text)
  MsgBox "Value: " & a & vbCrLf & "Text: " & b

関数の説明
 https://support.microsoft.com/ja-jp/kb/199824

古い内容ですが、ここの質疑回答とほぼおなじです。
http://www.xtremevbtalk.com/excel/108079-textbox …


なお、セルの場合は、Textプロパティは、値の取得のみですから、入力ができません。かなり明確に違いが出てきます。
    • good
    • 1

Textは書式設定に従った見た目の表現で返します。


例えばA1に0.7と書いて書式を%表示にした場合
A=Cells(1,1).Text Aの中身は70%
A=Cells(1,1).Value Aの中身は0.7
    • good
    • 11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A