VB6ユーザ(初心者)です。
テキストボックスに入力した数値の範囲チェックを行い、任意の最小~最大範囲内か否かを判定しています。
最大の判定は問題無いのですが、最小側の判定は、正常な場合と、そうでない場合がありますので、どなたか教えてください。
例として、最小~最大範囲を-100~100とします。
1)正常な場合 1/2 「即値と比較する場合」
If Text1.Text < -100 Then '問題無く判定出来ます。
2)正常な場合 2/2 「定数と比較する場合」
標準モジュールに下記定数を定義しています。
Public Const LimitMax As Long = 100
Public Const LimitMin As Long = -100
If Text1.Text < LimitMin Then '問題無く判定出来ます。
3)正常でない場合 「2)の定数を変数に代入して比較する場合」
Dim MinVal As Long
MinVal = LimitMin
If Text1.Text < MinVal Then '正常に判定出来ません。
上記1),2)の場合は、正常に判定されます。
しかし、上記3)の場合、テキストボックスに「-1」または「-10」等の数値を入力すると、必ず「-100より小さい」と判別されてしまいます。
変数の値を確認すると、正常に「-100」が代入されています。
判定方法に問題があるのでしょうか?或いはテキストボックスのTextプロパティ(文字列)と変数の比較自体に問題があるのでしょうか?
どなたか、アドバイスをお願いいたします。
開発環境は、以下の通りです。
OS: Win2000
VB: Ver6(SP6)
No.1ベストアンサー
- 回答日時:
Text1.Text の値は常に文字列です。
数字を入力してもそれは文字列の数字ですから、
数値と比較するときは、数値に変換してから比較する
というのが基本です。
例えうまくいく場合があったとしても
それはVBの方で面倒をみてくれているわけで
本当の比較の仕方ではありません。
If Val( Text1.Text ) < MinVal Then
If CLng( TextBox1.Text ) < MinVal Then
If CInt( TextBox1.Text ) < MinVal Then
If CDbl( TextBox1.Text ) < MinVal Then
など。
外しましたらご容赦願います。
onlyrom様
ありがとうございます。
おっしゃるとおり、数値に変換する方法が一番の解決方法のように
思います。
たまたま、VB側で面倒みてくれていたのですね。
ありがとうございました。
No.3
- 回答日時:
#1でおっしゃるように、テキストボックスの値をとると、文字列で帰っています。
もともと数字もキーボードから入るコードがとりあえず文字列だからです。ーー
もうひとつ質問の解決には関係ないですが
Public Const LimitMin As Long = -100
と定義して置いて
MinVal = LimitMin
If Text1.Text < MinVal Then
とやる必要は無いと思います。
If Text1.Text < LimitMin Then で良いのではないですか。
戸惑います。
定数も、メモリ的には変数と同じで、約束事で、宣言に過ぎないと思います。ただVBの場合言語仕様で、変更しようとするとエラーにしてくれる効果はあります。
しかしその宣言が、意味論的にコード作成や、解読に威力を発揮するのです。
Public Const zeirituc = 0.05
Sub test01()
Dim kin As Currency
Dim zeiritu As Double
Dim zei As Currency
kin = 1000
zeiritu = 0.05
zei =int( kin * zeiritu)
MsgBox zei
End Sub
Sub test02()
Dim kin As Currency
Dim zei As Currency
kin = 1000
zei =int( kin * zeirituc)
MsgBox zei
End Sub
imogasi様
ありがとうございます。
おっしゃるとおりに、定数宣言がるのるのですから、あえて変数を使用する必要はありませんが、私としては、何故定数だとOKで変数の場合に正常に比較出来ないのかも知っておきたかった次第です。
他の方に指摘されましたが、文字列を数値に変換したうえで比較する方法がベストのようです。
ありがとうございました。
No.2
- 回答日時:
VBらしく作るならこんなかんじでしょうか?
Private Sub Command1_Click()
Dim iret As Boolean
'Numeric_Check
If IsNumeric(Text1.Text) = True Then
'関数の引数に最大値、最小値、比較対象値をセット
iret = compare(100, -100, CLng(Text1.Text))
'戻り値がTrue(範囲内)
If iret = True Then
MsgBox "good"
Else
MsgBox "ng"
End If
Else
'Numeric_Err
MsgBox "数値を入力してください。"
End If
End Sub
Function compare(ByVal lmax As Long, ByVal lmin As Long, _
ByVal data As Long) As Boolean
'引数より比較結果をbooleanで返却
If data > lmin And data < lmax Then
compare = True
Else
compare = False
End If
End Function
きちんとデバッグできてなかったら
ごめんなさい。
sendaitaro様
ありがとうございます。
ご指摘通り、Compare関数を採用するのがスマートなようです。
参考にさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
8桁整数を限りなく短い文字列に...
-
wsprintf関数の使い方について
-
hiddenの値が期待した値で取得...
-
大量のデータを読み込んで表示...
-
パソコンキーボードで時分秒を...
-
VBAで配列の計算
-
C#の質問
-
JAVAのfor文で困っています。
-
Java 入力した整数値の合計を、...
-
ORA-01858: 数値を指定する箇所...
-
変数を動的に作るには?
-
演算子 ^ は double,double に...
-
ダブルクォーテーションのrepla...
-
1~100までの数字を表示し、か...
-
java プログラミングについて
-
iPhoneでのjavascriptで音を出...
-
var now = +new Dateの +は何?
-
C# ListBoxのインデックスの値...
-
IF関数でEmpty値を設定する方法。
-
java 素数判定について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
wsprintf関数の使い方について
-
javaのCSVデータ読込についてです
-
結合した文字列をファイル名に...
-
BCD形式で時刻を!
-
PSQLExceptionが発生する
-
C言語の変数(LSB)の合わせ込...
-
Stringクラスの変数の格納アド...
-
DateTimePickerに値を入れたい...
-
実行シェルからCOBOLへパラメー...
-
ResultSetの内部構造(Java)
-
DOSバッチで変数の値を変数名に...
-
char型での演算子
-
byte配列→float型の値を読みlon...
-
matchesを否定文として使う方法...
-
hiddenの値を消したくない!
-
JSPでHashMap・配列の変数の値...
-
String型の値が大文字か小文字...
-
VB.NET+Javascriptで、VB.NETで...
おすすめ情報