
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのifで 4 2023/05/16 14:21
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) VBAで “:” を含むセルの特定 2 2023/05/11 16:30
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
String型の値が大文字か小文字...
-
シフト演算の必要性
-
変数のビット列
-
javaのCSVデータ読込についてです
-
DateTimePickerに値を入れたい...
-
ダブルクォーテーションを含む...
-
JSPでの計算結果表示
-
C言語の変数(LSB)の合わせ込...
-
Javaの問題なのですが、「3文字...
-
WinInet.dllを利用したHttpQuer...
-
0x0F>>2は何故答えが3になる?
-
JSP内でfor文を使用し、出力結...
-
Evaluate()に文字列の形式の数...
-
matchesを否定文として使う方法...
-
このプログラミング誰か教えて...
-
Javaの判定処理について
-
ダブルクォーテーションとシン...
-
8桁整数を限りなく短い文字列に...
-
javaで\\という文字列の記述方法
-
VB6,論理演算子Orの使い方がわ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
Stringクラスの変数の格納アド...
-
javaのCSVデータ読込についてです
-
PSQLExceptionが発生する
-
excel vba 時間計算と条件分岐...
-
wsprintf関数の使い方について
-
BCD形式で時刻を!
-
C言語の変数(LSB)の合わせ込...
-
DOSバッチで変数の値を変数名に...
-
JSPでの計算結果表示
-
DateTimePickerに値を入れたい...
-
JSPでHashMap・配列の変数の値...
-
StringBufferクラスについて
-
char型での演算子
-
結合した文字列をファイル名に...
-
String str = "a\\\\b\\\\c";
-
Evaluate()に文字列の形式の数...
-
getParameterの値変更
-
matchesを否定文として使う方法...
おすすめ情報