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

1)ユーザーフォーム上のTextBox1に入力された数値とTextBox2に入力された数値の大小の比較を下記のような感じで行ってみたところ、40>300や50>100という感じの結果になってしまいます(ゼロを無視してる?)プロパティは.Valueと.Textの両方を試してみたのですが、同じような結果だったと思います。正しい結果を出すにはどうすればよいのでしょうか。
If UserForm1.TextBox1.Value>UserForm1.TextBox2.Value
then~

2)変数を宣言して、その変数にTextBox1の内容(数値)を代入する場合、Integer型等とTextBox型のどちらとして宣言するのが正しいのでしょうか。

以上二点、よろしくお願いします。(Excel2000使用)

A 回答 (2件)

実は俺も知らなかったんですが、今実験したらおっしゃる状況が再現しました



Option Explicit

Private Sub CommandButton1_Click()
If UserForm1.TextBox1.Value > UserForm1.TextBox2.Value Then
MsgBox ("TextBox1の方が大きい")
End If
End Sub


TextBox1.valueが40
TextBox2.valueが200

のとき、Msgboxが表示されました。
(多分文字列型としてASCIIコードか何かを比較しているのでしょう。)

そこで

Option Explicit

Private Sub CommandButton1_Click()
If CInt(UserForm1.TextBox1.Value) > CInt(UserForm1.TextBox2.Value) Then
MsgBox ("TextBox1の方が大きい")
End If
End Sub

とすることで、大小比較がうまくいくようになりました。


変数に数字として代入する時は

Private Sub hoge()
Dim a as Integer

a = CInt(TextBox1.Value)

End Sub

がいいと思います
    • good
    • 0
この回答へのお礼

解決しました。ありがとうございました。

お礼日時:2006/07/04 23:07

テキストボックスは文字通り入力した値が文字型で得られます。



従って、文字列比較で先頭の文字が4と2では2の方が小さいと判定されます。ですから

Private Sub TextBox1_Change()
 If IsNumeric(UserForm1.TextBox1.Text) And IsNumeric(UserForm1.TextBox2.Text) Then
  If CSng(UserForm1.TextBox1.Text) > CSng(UserForm1.TextBox2.Text) Then
   処理1
  Else
   処理2
  End If
 End If
End Sub
のように数字と判定できるなら型変換して比較するのがよいと思います。

整数しか入らないならCintでも可です。
    • good
    • 0
この回答へのお礼

解決しました。ありがとうございました。

お礼日時:2006/07/04 23:08

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

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