• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
noname#24731
noname#24731
回答No.2

2行目 Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) の結果は 計算結果が 7 であっても Label1.Caption は " 7" 仁なり = 比較はできないでしょう 数値同士の比較 VAL か 文字比較(TRIM使用)にしてはいかが?

yoyoyouyou
質問者

お礼

助かりました!! 数値は、数値。文字は、文字同士でないと、比較ができないんですね。 TRIM 関数を調べてよく考えたら、すぐに出来ました! 有難うございました(^^ 精進します~。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

私も作ってみました。 作ってみて、自分のコードに不満を感じています。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

回答No.4

#3です。 > Private Sub Check() > とは、すべてのPrivate Sub に一度に命令を出す方法ですか?私は1つ1つ書いていたので…。(^^; > また、Callcheck とは何でしょう? Private Sub Check() はサブルーチンで「Check」は勝手に付けた名前です。 サブルーチンとは、共通な処理を一箇所で定義して、 その処理が必要な別のPrivate Sub から飛んで来て、 処理をして、呼んだPrivate Sub 帰って行く。 別のPrivate Sub から飛んで行くのが、Call 命令です。 Call Check() は、Check()の処理をして帰って来なさい。という意味です。

回答No.3

とりあえず、下記で動きます。 何故かはソースを解析して下さい。 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

yoyoyouyou
質問者

お礼

態々"問い"まで付けていただいて有難うございます☆ 勉強になります。 >>>Private Sub Check() とは、すべてのPrivate Sub に一度に命令を出す方法ですか?私は1つ1つ書いていたので…。(^^; また、Callcheck とは何でしょう? 勉強しないまま、質問しまくってるようなので 本でも買ってしっかり勉強します m(_ _)m 失礼しました。

  • gugux
  • ベストアンサー率16% (68/413)
回答No.1

デバッガーで、1行ずつ実行して、処理がチェック部分に行くかどうか、チェック部分で条件分岐するか等しらべてみましたか?

yoyoyouyou
質問者

お礼

マニュアルを見ながら、デバッグ?をしてみましたが、よくわかりませんでした。 基本中の基本のようなので、しっかり勉強したいと思います。有難うございました。

関連するQ&A