VBAでの電卓作成です。昨日に引き続き問題個所が新たに出てきて、これ以上自分ではどこをどう修正すれば
良いのか解らないので、質問させていただきます。
発生している問題・エラーメッセージ
以下のような現象が出てしまいます(発見出来てないだけで他にもあるかもしれませんが・・)
(1)a-b = c 若しくは a/b = c の後に「+」、「×」「-」、「÷」を押すと0或いは1になる
(2)axb = c 若しくはa+b = c の後に「+」、「×」、「-」、「÷」を押すと cが足されて
クリックするごとに加算されていく
例えば(2)の場合、1+1=2の後に 2×2とやったら4になるようにしたいですが
現状だと「×」を押しただけでそのまま2が加算されて4になります。
該当のソースコード
Option Explicit Dim ans As Double '答えを保持 Dim num As Double Dim ent As Integer '分岐する変数 1は+、2は-、3は*、4は/ Dim enzan As Boolean 'ture;+-*/ falseそれ以外 条件を指定した結果を保 Private Sub CommandButton1_Click() If enzan = False Then If TextBox1.Text = "0" Then TextBox1.Text = "1" Else TextBox1.Text = TextBox1.Text & "1" End If Else TextBox1.Text = "1" enzan = False End If End Sub ※2~9ボタンも上記と同様です。 Private Sub CommandButton12_Click() '- 引き算 enzan = True num = Val(TextBox1.Text) Select Case ent Case 0 ans = num Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 ans = ans / num End Select TextBox1.Text = ans ent = 2 End Sub Private Sub CommandButton13_Click() '* 掛け算 enzan = True num = Val(TextBox1.Text) Select Case ent Case 0 ans = num Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 ans = ans / num End Select TextBox1.Text = ans ent = 3 End Sub Private Sub CommandButton14_Click() '/ 割り算 enzan = True num = Val(TextBox1.Text) Select Case ent Case 0 ans = num Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 ans = ans / num End Select TextBox1.Text = ans ent = 4 End Sub Private Sub CommandButton11_Click() '⁺ 足し算 enzan = True num = Val(TextBox1.Text) Select Case ent Case 0 ans = num Case 1 ans = ans + num Case 2 ans = ans - num Case 3 ans = ans * num Case 4 ans = ans / num End Select TextBox1.Text = ans ent = 1 End Sub Private Sub CommandButton15_Click() 'イコールボタン ここで条件分岐 enzan = True num = Val(TextBox1.Text) If ent = 1 Then ans = num + ans TextBox1.Text = CStr(ans) End If If ent = 2 Then ans = ans - num TextBox1.Text = CStr(ans) End If If ent = 3 Then ans = ans * num TextBox1.Text = CStr(ans) End If If ent = 4 Then ans = ans / num TextBox1.Text = CStr(ans) End If Range("A1").Value = Str(ans) End Sub Private Sub CommandButton18_Click() 'クリアボタン ent = 0 num = 0 TextBox1.Text = CStr(ans) End Sub Private Sub CommandButton10_Click() '0ボタン If enzan = False Then If TextBox1.Text = "0" Then TextBox1.Text = "" Else TextBox1.Text = TextBox1.Text & "0" End If Else TextBox1.Text = "0" enzan = False End If End Sub Private Sub CommandButton16_Click() 'オールクリア TextBox1.Text = "0" ent = 0 num = 0 ans = 0 End Sub Private Sub CommandButton17_Click() '00ボタン If enzan = False Then If TextBox1.Text = "0" Then TextBox1.Text = "" Else TextBox1.Text = TextBox1.Text & "00" End If Else TextBox1.Text = "00" enzan = False End If End Sub Private Sub CommandButton19_Click() '小数点 TextBox1.Text = TextBox1.Text & "." End Sub Private Sub UserForm_Click() End Sub
試したこと
=の部分のところで、一度 ans = 0 num = 0と付け加えましたが
改善されませんでした。
解決策・修正箇所などが解れば教えていただけると幸いです。
補足情報(FW/ツールのバージョンなど)
【補足】
・テキストボックスには同じ数字を羅列させるために一旦文字列として表しています。
ex「1111」など
・足し算は「1」、引き算は「2」、掛け算は「3」、割り算は「4」
で条件分岐するようにしています。
・オールクリアボタンを押すとテキストボックスには「0」が入るため
次に数字を押した時に「01」とか「023」などにならないようにDim enzan As Boolean で
0を上書きするようにしています。
回答2件
あなたの回答
tips
プレビュー