VBAのif文で下記コードを書いています(コード一部)
If Me.TextBox6 >= Me.TextBox4 And Me.TextBox6 <= Me.TextBox4 Then
ユーザーフォームのTextBox6に入力されている数値を
TextBox4(最小値)、TextBox5(最大値)の数値と比較して
範囲なら処理に進むコードなのですが
TextBox4、TextBox5に入力されている桁がどちらも同じ桁なら
問題なく動作するのですが、TextBox4が2桁、TextBox5が3桁
だと正しく動作しません。
原因や、修正コードを教えてください。
No.4
- 回答日時:
こんにちは
問題は解決されたようですね
ユーザーフォームだと思いますので違った視点で対策すると
TextBox4、TextBox5への入力が手入力ならば
目的を鑑みて入力制御を設定する方法もありかな?
TextBox4、TextBox5への入力はIMEModeを半角英数字のみに設定
TextBox4、TextBox5へのKeyPressイベントで数値と.のみ入力可能
Private Sub test()
Dim tbx As Double
If IsNumeric(Me.TextBox6) Then
tbx = CDbl(Me.TextBox6)
If tbx >= Me.TextBox4 And tbx <= Me.TextBox5 Then
MsgBox "範囲内の数値です"
Else
MsgBox "範囲外の数値です"
End If
Else
MsgBox "TextBox6には数値を入力してください"
End If
End Sub
Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If TextBox4 <> "" Then
If Not Chr(KeyAscii) Like "[0-9.]" Then
KeyAscii = 0
End If
Else
If Not Chr(KeyAscii) Like "[0-9]" Then
KeyAscii = 0
End If
End If
End Sub
Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If TextBox5 <> "" Then
If Not Chr(KeyAscii) Like "[0-9.]" Then
KeyAscii = 0
End If
Else
If Not Chr(KeyAscii) Like "[0-9]" Then
KeyAscii = 0
End If
End If
End Sub
Private Sub UserForm_Initialize()
TextBox4.IMEMode = fmIMEModeDisable
TextBox5.IMEMode = fmIMEModeDisable
TextBox6.IMEMode = fmIMEModeDisable
End Sub
VBAでTextBox4、TextBox5へ出力している場合は数値として出力
変数型については暫定
コードをまとめていませんが 参考程度で
No.3
- 回答日時:
まぁもう解決しているようですけど・・・・
『TextBox6に入力されている数値』
と貴方は解釈していても、システム的にはその段階では数字の文字列です
値に変換してから比較しないと、文字コードの大小で比較するので意図しない結果になります
数値と数字文字列の違いは大事な概念ですからこれを機会に理解してください
No.2
- 回答日時:
問題のコードを見ると、条件文の比較演算子が不正確なため、正しく動作しない可能性があります。
具体的には、`Me.TextBox6 >= Me.TextBox4 And Me.TextBox6 <= Me.TextBox4` の箇所が問題です。TextBox4とTextBox5の比較演算子が同じになってしまっています。修正するためには、TextBox4とTextBox5の比較演算子をそれぞれ別々に指定する必要があります。以下に修正例を示します。
If Me.TextBox6 >= Me.TextBox4 And Me.TextBox6 <= Me.TextBox5 Then
' 処理に進むコードをここに記述する
End If
修正後のコードでは、TextBox4とTextBox5の比較演算子を個別に指定しています。TextBox4が最小値を表し、TextBox5が最大値を表すようになっています。
修正後のコードを使用することで、TextBox4が2桁でTextBox5が3桁の場合でも正しく動作するはずです。もし他に問題がある場合は、詳細な情報が必要になるため、追加の修正やデバッグが必要になるかもしれません。
ご回答いただきありがとうございます。
Me.TextBox6 >= Me.TextBox4 And Me.TextBox6 <= Me.TextBox4
の部分に関してはこちらの記載間違いでした。すみません。
正しい状態でも、if文の方は正しく動作しませんでしたが
№1さんに教えて頂いたコードで動作確認できました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) 関数を最終行までコピー 3 2022/09/04 11:05
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- Excel(エクセル) VBA 同日で2回目(午後)の体温を登録するときのコード 3 2022/08/28 20:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
過剰なオブジェクト指向脳から...
-
フィルターかけた後、重複を除...
-
Exel VBA 別ブックから該当デ...
-
1、Rstudioで回帰直線を求める...
-
pythonにてseleniumを使うも、...
-
変数名「cur」について
-
VB6で読み上げをしたい
-
PreviewKeyDownイベントが2回...
-
VB6のComboBox関連の書き方をVB...
-
ユーザーフォームに2つのコン...
-
ユーザーフォームで銀行に対応...
-
chatgptでつくってもらったコー...
-
sinカーブの表示のさせ方
-
access2003 クエリSQL文に...
-
Excel VBAについて
-
Gitのクローンについて
-
ExcelのVBAコードについて教え...
-
python コードについて(初学者...
-
パイソンプログラム
-
COBOLの文法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
chatgptでつくってもらったコー...
-
欠番の抽出について
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
PreviewKeyDownイベントが2回...
-
将来AIが進歩してくるにつれて...
-
ACCESSユニオンクエリでORDER B...
-
VBAでファイルオープン後にコー...
-
COBOLの文法
-
Nullの使い方が不正です。
おすすめ情報