アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAのif文で下記コードを書いています(コード一部)

If Me.TextBox6 >= Me.TextBox4 And Me.TextBox6 <= Me.TextBox4 Then

ユーザーフォームのTextBox6に入力されている数値を
TextBox4(最小値)、TextBox5(最大値)の数値と比較して
範囲なら処理に進むコードなのですが

TextBox4、TextBox5に入力されている桁がどちらも同じ桁なら
問題なく動作するのですが、TextBox4が2桁、TextBox5が3桁
だと正しく動作しません。

原因や、修正コードを教えてください。

A 回答 (4件)

TextBoxの値は文字列です。


Val 関数によって数値化して比較すればうまくいくと思います。

If Val(Me.TextBox6) >= Val(Me.TextBox4) And Val(Me.TextBox6) <= Val(Me.TextBox5) Then
    • good
    • 0
この回答へのお礼

数値化のやり方をご教示頂き、またひとつ勉強になりました。
ありがとうございました。

お礼日時:2023/05/16 15:29

こんにちは


問題は解決されたようですね
ユーザーフォームだと思いますので違った視点で対策すると
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へ出力している場合は数値として出力
変数型については暫定
コードをまとめていませんが 参考程度で
    • good
    • 0

まぁもう解決しているようですけど・・・・



『TextBox6に入力されている数値』
と貴方は解釈していても、システム的にはその段階では数字の文字列です

値に変換してから比較しないと、文字コードの大小で比較するので意図しない結果になります
数値と数字文字列の違いは大事な概念ですからこれを機会に理解してください
    • good
    • 0

問題のコードを見ると、条件文の比較演算子が不正確なため、正しく動作しない可能性があります。

具体的には、`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桁の場合でも正しく動作するはずです。もし他に問題がある場合は、詳細な情報が必要になるため、追加の修正やデバッグが必要になるかもしれません。
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。
Me.TextBox6 >= Me.TextBox4 And Me.TextBox6 <= Me.TextBox4
の部分に関してはこちらの記載間違いでした。すみません。
正しい状態でも、if文の方は正しく動作しませんでしたが
№1さんに教えて頂いたコードで動作確認できました。
ありがとうございました。

お礼日時:2023/05/16 15:28

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