- ベストアンサー
VB初心者です
計算結果が"7"の時に限り、「当たり!」と表示される、ちょっと意味不明な計算機を作っています。 現在、下記のように書いてますが、何故かうまくいきません。(当たりが表示されない 何故でしょうか?お助けください。。m(_ _)m Private Sub Command1_Click() Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) Label3.Caption = "+" Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = "7" Then Label4.Visible = True End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Str(Val(Text1.Text) * Val(Text2.Text)) Label3.Caption = "*" End Sub Private Sub Command4_Click() Label1.Caption = Str(Val(Text1.Text) - Val(Text2.Text)) Label3.Caption = "-" End Sub Private Sub Command5_Click() Label1.Caption = Str(Val(Text1.Text) / Val(Text2.Text)) Label3.Caption = "/" End Sub
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
2行目 Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) の結果は 計算結果が 7 であっても Label1.Caption は " 7" 仁なり = 比較はできないでしょう 数値同士の比較 VAL か 文字比較(TRIM使用)にしてはいかが?
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
私も作ってみました。 作ってみて、自分のコードに不満を感じています。Operand(演算子)の引数は、何か余計だなって思います。 If Text1.Text <> "" And Text2.Text <> "" Then なお、この空のTextBox のチェックが要らなければ、If ~ は、取ってしまってもよいと思います。 Private Sub Command1_Click() If Text1.Text <> "" And Text2.Text <> "" Then CheckSeven Text1.Text, Text2.Text, "+" End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() If Text1.Text <> "" And Text2.Text <> "" Then CheckSeven Text1.Text, Text2.Text, "*" End If End Sub Private Sub Command4_Click() If Text1.Text <> "" And Text2.Text <> "" Then CheckSeven Text1.Text, Text2.Text, "-" End If End Sub Private Sub Command5_Click() If Text1.Text <> "" And Text2.Text <> "" Then CheckSeven Text1.Text, Text2.Text, "/" End If End Sub Private Sub Form_Load() With Label4 .Caption = "当たり!" 'もしかしたら、要らないかもね。 .Visible = False End With End Sub Private Sub CheckSeven(arg1 As String, _ arg2 As String, _ Operand As String) ' Dim num1 As Long, num2 As Long, Sum As Double num1 = CDbl(arg1): num2 = CDbl(arg2) Select Case Operand Case "+" Sum = num1 + num2 Case "*" Sum = num1 * num2 Case "-" Sum = num1 - num2 Case "/" Sum = num1 / num2 End Select If Sum = 7 Then Label4.Visible = True Else Label4.Visible = False End If Label3.Caption = Operand Label1.Caption = CStr(Int(Sum * 1000) / 1000) End Sub
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
#3です。 > Private Sub Check() > とは、すべてのPrivate Sub に一度に命令を出す方法ですか?私は1つ1つ書いていたので…。(^^; > また、Callcheck とは何でしょう? Private Sub Check() はサブルーチンで「Check」は勝手に付けた名前です。 サブルーチンとは、共通な処理を一箇所で定義して、 その処理が必要な別のPrivate Sub から飛んで来て、 処理をして、呼んだPrivate Sub 帰って行く。 別のPrivate Sub から飛んで行くのが、Call 命令です。 Call Check() は、Check()の処理をして帰って来なさい。という意味です。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
とりあえず、下記で動きます。 何故かはソースを解析して下さい。 Str(Val(Text1.Text) / Val(Text2.Text)) をどうしても使いたいのであれば、 If Label1.Caption = "△7" Then とブランク(サイン用)をひとつ空けて下さい。 あとは、よしなに♪ ではでは! Private Sub Command1_Click() Label1.Caption = Val(Text1.Text) + Val(Text2.Text) Label3.Caption = "+" Call Check End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Val(Text1.Text) * Val(Text2.Text) Label3.Caption = "*" Call Check End Sub Private Sub Command4_Click() Label1.Caption = Val(Text1.Text) - Val(Text2.Text) Label3.Caption = "-" Call Check End Sub Private Sub Command5_Click() Label1.Caption = Val(Text1.Text) / Val(Text2.Text) Label3.Caption = "/" Call Check End Sub Private Sub Check() Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = 7 Then Label4.Visible = True End If End Sub
お礼
態々"問い"まで付けていただいて有難うございます☆ 勉強になります。 >>>Private Sub Check() とは、すべてのPrivate Sub に一度に命令を出す方法ですか?私は1つ1つ書いていたので…。(^^; また、Callcheck とは何でしょう? 勉強しないまま、質問しまくってるようなので 本でも買ってしっかり勉強します m(_ _)m 失礼しました。
- gugux
- ベストアンサー率16% (68/413)
デバッガーで、1行ずつ実行して、処理がチェック部分に行くかどうか、チェック部分で条件分岐するか等しらべてみましたか?
お礼
マニュアルを見ながら、デバッグ?をしてみましたが、よくわかりませんでした。 基本中の基本のようなので、しっかり勉強したいと思います。有難うございました。
お礼
助かりました!! 数値は、数値。文字は、文字同士でないと、比較ができないんですね。 TRIM 関数を調べてよく考えたら、すぐに出来ました! 有難うございました(^^ 精進します~。