• ベストアンサー

TextBox1とTextBox2の数値の大小の比較について

1)ユーザーフォーム上のTextBox1に入力された数値とTextBox2に入力された数値の大小の比較を下記のような感じで行ってみたところ、40>300や50>100という感じの結果になってしまいます(ゼロを無視してる?)プロパティは.Valueと.Textの両方を試してみたのですが、同じような結果だったと思います。正しい結果を出すにはどうすればよいのでしょうか。 If UserForm1.TextBox1.Value>UserForm1.TextBox2.Value then~ 2)変数を宣言して、その変数にTextBox1の内容(数値)を代入する場合、Integer型等とTextBox型のどちらとして宣言するのが正しいのでしょうか。 以上二点、よろしくお願いします。(Excel2000使用)

質問者が選んだベストアンサー

  • ベストアンサー
noname#20377
noname#20377
回答No.1

実は俺も知らなかったんですが、今実験したらおっしゃる状況が再現しました 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 がいいと思います

noname#128465
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

テキストボックスは文字通り入力した値が文字型で得られます。 従って、文字列比較で先頭の文字が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でも可です。

noname#128465
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelの数値の比較がうまくいきません???

    ExcelのVbaでアンケートの入力フォームを初めて作成しています。 フォームに,テキストボックスを配置して,それを指定したセルに代入するというものです。 このとき,テキストボックスの中身とセルの中身が一致しているかどうかを判断したいと考えて, If Range("A1").Value = Textbox1.Value then ・・・ などとやりました。 そしたら,文字列の時は,うまくいくのですが,数値を入力したら,明らかに同じ数値が入っているのに,上の条件式が"False"になってしまうのです。 IsNumeric関数で調べると,双方とも数値であるとの結果が出ています。どちらも数値であっても3=3が"False"になってしまうのです。 どういうことなんでしょう? どなたかよろしくお願いいたします。

  • ExcelVBA TextBoxの値を取得できない

    Excel2010です。 2つのUserFormがあり(UserForm1・UserForm2とします)、UserForm1にはTextBox1~100を配置し、UserForm2にもTextBox1~150を配置しています。 それぞれのUserFormにおいて、そのUserForm名を変数に格納しておき、TextBoxの値を取得するコードを別のプロシージャ(「TextBoxチェック」)に書き、それを呼び出してTextBoxの値を格納しようとしましたができませんでした。 該当箇所のコードは以下のとおりです。 Public UFName As String 'UserFormの名前 Sub UserForm1処理() Const Num = 100 UFName = "UserForm1" Call TextBoxチェック(Num) End Sub Sub UserForm2処理() Const Num = 150 UFName = "UserForm2" Call TextBoxチェック(Num) End Sub Sub TextBoxチェック(Num As Integer) Dim i As Integer Dim Con As Control With UserForms.Add(UFName) For i = 1 To Num Set Con = .Controls("TextBox" & i) Debug.Print Con.Name Debug.Print .Controls("TextBox" & i).Value   (その他の処理のコードは省略) Next i End With End Sub 上のコードでは1つ目のDebug.Printの結果(TextBox名)は取得できていますが、2つ目のDebug.Printの結果(TextBoxの値)は空欄になってしまいます。 つまり、 With UserForms.Add(UFName)が、 Set Con = .Controls("TextBox" & i) では反映されているのに、 .Controls("TextBox" & i).Value では反映されていないということだと思います。 また、 Debug.Print .Controls("TextBox" & i).Value を Debug.Print UserForm1.Controls("TextBox" & i).Value とすると、UserForm1の値を取得できます。 また、 With UFName_UF を With UserForm1 にすると、 Debug.Print .Controls("TextBox" & i).Value の値は取得できます。 UserForm1とUserForm2において、TextBoxの値を取得する部分は共通しているため、その部分を別プロシージャにして呼び出して処理したいのですが、うまくいきません。 TextBoxの値を取得できない理由や、対処法が分かれば教えていただきたいです。

  • スペースで区切った3つの数値の大小を比較する

    C初心者です。 たとえば「32 49 67」と入力させて、 その大小を比較するプログラムを書きたいんですが、 どうやって数値をひろっていいのか分かりません;; int型でたとえばiocharという変数を宣言して while( (iochar = getchar()) != EOF)とか書いてみても putchar(iochar)で表示することはできても 32、49、67を独立した数値として扱ってはくれないですよね……? さらに表示したあとプログラムが終了しないので exit()を使ってみたんですけど変化なくて; while(){}の中に入れちゃうとputchar(iochar)が最初の1文字を 表示しただけで終了しちゃうし……。 初歩の初歩で申し訳ないんですけど、何かいい解決策があれば 教えてもらえると助かりますorz

  • VBAの変数について

    VBAでUserFormからデータを入力します。 入力された各データをTarget1~Target20に代入します。 各Targetにデータが入っている場合は、配列K(i)に「1」を格納します。 そこで、Target "1"~"20" を変数iであらわしたいのですが、どのように表現したらよいのでしょうか。 Dim i As Integer Dim K(20) As Integer Target1 = TextBox1.Value Target2 = ComboBox1.Value : : Target19 = TextBox12.Value Target20 = ComboBox8.Value For i = 1 To 20 If 『  ?   』 <> "" Then K(i) = 1 EndIf Next i

  • UserFormeのTextboxについて

    初めて質問させていただきます セルに代入する値をUserFormのTextboxから得たいのですが、入力する際にTextboxの中で改行ができずに困っております。 数式バーの中で改行する時のようにAlt+Enterといった感じで出来るものでしょうか? ご存知の方ありましたらよろしくお願いいたします

  • TextBoxをInteger型の変数に代入したい

    開発環境は、VB2005 ExpressEditionです。 TextBoxをInteger型の変数に代入したいのですが。 Dim num01 As Integer 1 num01 = Int(TextBox1.Text) 2 num01 = CInt(TextBox1.Text) 3 num01 = Integer.Parse(TextBox1.Text) 1,2,3どれで実行しても”入力文字列の形式が正しくありません。”とでてしまいます。どなたか良い方法をご存知の方がいたら、教えて下さい。

  • vba で数値の比較

    現在、複数の変数同士の大小関係を比較して、 条件があっていれば○か×を特定のセルに出力する というマクロを作成しております。 "○"条件を満たした時、しっかりとそちら処理に流れるのですが、 何故か"×"の条件を満たしても、"×"の処理に入ってくれません。 そのままelseの方へ流れてしまいます。 数値の大小関係は何度も確認したのですが、間違ってはいません でした・・・ 自分の力では解決出来ませんでした(>_<)! どなたかお力添えをお願いします。 以下、問題の箇所です。 このif文より上の箇所では変数a(行座標)の設定と、 各変数への値の代入を行っています。 If lwma52(1) < ema21(1) < lwma13(1) _ And lwma13(2) < lwma13(1) _ And ema21(2) < ema21(1) _ And lwma52(2) < lwma52(1) _ And closes(2) < closes(1) < opens Then Cells(a, 25).Value = "○" ElseIf lwma52(1) > ema21(1) > lwma13(1) _ And lwma13(2) > lwma13(1) _ And ema21(2) > ema21(1) _ And lwma52(2) > lwma52(1) _ And closes(2) > closes(1) Then Cells(a, 25).Value = "×" Else Cells(a, 25).Value = "" End If よろしくお願い致します。

  • 【Excel VBA】UserForm上のTextBoxについて

    UserForm上にTextBoxを配置し テキストを入力後Enterを押すことで中身を判定するロジックをKeyUp関数内に設けているのですが、 たまにEnterが反応しないことがあります。 その他のキー入力は入りますし、 Enter自体も一旦他のウィンドウをアクティブにしてから 再度UserFormをアクティブに戻して入力すると反応します。 Enterが押されるまでは以下のコードにより関数を抜けています。 If KeyCode.Value <> vbKeyReturn Or TextBox1.Value = "" Then Exit Sub 再現性もないので何が原因なのか判りません。 よろしくお願いいたします。

  • Access2000でTextBox変数の代入

    Access2000でTextBox変数を作成し、条件に応じて フォーム上に配置した2つのテキストボックスをその変数に代入したいのですが、うまくいきません。 Public tBox as TextBox If i = 1 Then Set tBox = テキスト1 ElseIf i = 2 Then Set tBox = テキスト2 End if ※ テキスト1、テキスト2はフォーム上に配置した テキストボックスの名称 このコードを実行すると、テキスト1は テキスト1.Textと解釈され、Textプロパティに何も設定 されていない場合、tBoxにはNULLが代入されます。 Textプロパティの値ではなく、テキストボックスオブジェクトそのものを変数に代入するにはどうすればよいのでしょうか。 ご教授お願いします。 環境は OS:Windows2000 Professional   Access2000 です。

  • Excel VBA セルの内容をTextBoxに

    ExcelのVBAで質問があります。 複数のシートの表に入力した値の合計を出したいのですが、 その後の処理もあり、ユーザーフォームのテキストボックスに反映させたいと考えています。 Windows7のExcel2010で作っています。 試しにセルB1の値が変わった時、 テキストボックスに反映させるつもりで作ったコードは以下の通りですが、 上手くいきません。 Sub Z_test() UserForm2.Show vbModeless End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "B1" Then UserForm2.TextBox1.Value = Range("B1").Value '←※ End If End Sub ※の行には他にも UserForm2.Controls("TextBox1").Value = Range("B1").Value と調べたコードを試してみたのですが、 セルの内容が全く反映されません。 セルB1には数式の「=SUM(C2:C1000)」 が入っており、表のC列に入力された値の合計を求めています。 どなたかお知恵を拝借できれば大変助かります。 宜しくお願い致します。 長文失礼しました。

このQ&Aのポイント
  • アパートの賃貸契約などで使われる「善良な管理者の注意義務」には、法令遵守の義務も含まれるのか疑問が生じます。
  • クルマのレンタル契約書の場合、借主が「善良な管理者の注意義務」を遵守しながらも、法令違反の行為をした場合についても疑問が生じます。
  • 言葉の解釈によっては、「善良な管理者の注意義務」には法令遵守の義務も含まれると解釈できるかもしれませんが、明確な定義はなされていません。
回答を見る

専門家に質問してみよう