質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1932閲覧

VBAの電卓作成 演算での疑問点

milk1218

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/09/07 02:01

前提・実現したいこと

VBAで電卓を作成しています。
「1+1」や「2+3+1+...」のような等の足し算は何とか出来るのですが、何故か同じ書き方で
掛け算・引き算・割り算が出来ません。
どこにも問題点があるのかも解らない状態なので、解決策があれば教えていただけますでしょうか。

【補足】
・テキストボックスには同じ数字を羅列させるために一旦文字列として表しています。
ex「1111」など

・足し算は「1」、引き算は「2」、掛け算は「3」、割り算は「4」
で条件分岐するようにしています。

・オールクリアボタンを押すとテキストボックスには「0」が入るため
次に数字を押した時に「01」とか「023」などにならないようにDim enzan As Boolean で
0を上書きするようにしています。

発生している問題・エラーメッセージ

掛け算、引き算、割り算ボタンを押すとテキストボックスが「0」になり計算が出来ない。

該当のソースコード

Option Explicit

Dim ans As Double '答えを保持
Dim num As Double '入力数字
Dim ent As Integer '分岐する変数 1は+、2は-、3は*、4は/
Dim enzan As Boolean 'ture;+-*/ falseそれ以外 条件を指定した結果を保存
Dim count As Byte

Private Sub CommandButton1_Click()     '1のボタン

If enzan = False Then
If TextBox1.Text = "0" Then 'コマンドを押した際に0を上書きして数値を表示
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) If ent = 1 Then ans = ans + num TextBox1.Text = ans End If If ent = 2 Then ans = ans - num TextBox1.Text = ans End If If ent = 3 Then ans = ans * num TextBox1.Text = ans End If If ent = 4 Then ans = ans / num TextBox1.Text = ans End If ent = 2

End Sub

Private Sub CommandButton13_Click() '*

enzan = Ture num = Val(TextBox1.Text) If ent = 1 Then ans = ans + num TextBox1.Text = ans End If If ent = 2 Then ans = ans - num TextBox1.Text = ans End If If ent = 3 Then ans = ans * num TextBox1.Text = ans End If If ent = 4 Then ans = ans / num TextBox1.Text = ans End If ent = 3

End Sub

Private Sub CommandButton14_Click() '/

enzan = True num = Val(TextBox1.Text) If ent = 1 Then ans = ans + num TextBox1.Text = ans End If If ent = 2 Then ans = ans - num TextBox1.Text = ans End If If ent = 3 Then ans = ans * num TextBox1.Text = ans End If If ent = 4 Then ans = ans / num TextBox1.Text = ans End If ent = 4

End Sub
Private Sub CommandButton11_Click() '足し算

enzan = Ture num = Val(TextBox1.Text) If ent = 1 Then ans = ans + num TextBox1.Text = ans End If If ent = 2 Then ans = ans - num TextBox1.Text = ans End If If ent = 3 Then ans = ans * num TextBox1.Text = ans End If If ent = 4 Then ans = ans / num TextBox1.Text = ans End If ent = 1

End Sub

Private Sub CommandButton15_Click() 'イコールボタン ここで条件分岐

If ent = 1 Then ans = ans + num TextBox1.Text = ans End If If ent = 2 Then ans = ans - num TextBox1.Text = ans End If If ent = 3 Then ans = ans * num TextBox1.Text = ans End If If ent = 4 Then ans = ans - num TextBox1.Text = ans End If

End Sub

Private Sub CommandButton18_Click() 'クリアボタン

※ここはまだ保留中です

End Sub

Private Sub CommandButton10_Click() '0

If enzan = False Then
If TextBox1.Text = "0" Then
TextBox1.Text = "0"

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" num = 0 ans = 0 count = 0

End Sub
Private Sub CommandButton17_Click() '00

If enzan = False Then

If TextBox1.Text = "0" Then
TextBox1.Text = "0"

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

補足情報(FW/ツールのバージョンなど)

【補足】
・テキストボックスには同じ数字を羅列させるために一旦文字列として表しています。
ex「1111」など

・足し算は「1」、引き算は「2」、掛け算は「3」、割り算は「4」
で条件分岐するようにしています。

・オールクリアボタンを押すとテキストボックスには「0」が入るため
次に数字を押した時に「01」とか「023」などにならないようにDim enzan As Boolean で
0を上書きするようにしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/09/07 02:06

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
Zuishin

2021/09/07 02:11 編集

Excel で電卓を作成するという謎ミッション。 前世紀は確かに Excel の前で電卓を叩いているおじさんがいました。
hatena19

2021/09/07 02:18

コーディングの勉強の為ということでしょうかね。 そうでないなら、Evaluateメソッドで簡単に実現できます。 Evaluateメソッド(文字列の数式を実行します)|VBA技術解説 https://excel-ubara.com/excelvba4/EXCEL_VBA_424.html
milk1218

2021/09/07 03:05

コーティングの勉強の一環ですね・・・!
jinoji

2021/09/08 03:46

True を ture と打ち間違えるのは、私もよくやります。
milk1218

2021/09/08 07:55

本文の間違っていましたね・・!ご指摘ありがとうございます。
guest

回答1

0

ベストアンサー

コーディングの勉強の為とということなら、
例えば、かけ算ボタンなら、下記のようにコードを追加するといいでしょう。
他の演算ボタンも同様に。

vba

1Private Sub CommandButton13_Click() '* 2 3 enzan = True 4 num = Val(TextBox1.Text) 5 6 '以下のIf文を追加 演算キーが一度も押されてない場合処理 7 If ent = 0 Then 8 ans = num 9 TextBox1.Text = ans 10 End If 11 12 If ent = 1 Then 13 ans = ans + num 14 TextBox1.Text = ans 15 End If 16 If ent = 2 Then 17 ans = ans - num 18 TextBox1.Text = ans 19 End If 20 If ent = 3 Then 21 ans = ans * num 22 TextBox1.Text = ans 23 End If 24 If ent = 4 Then 25 ans = ans / num 26 TextBox1.Text = ans 27 End If 28 29 ent = 3 30 31End Sub

このような場合分けは、If文を並べるより、Select Case文の方が読みやすいでしょう。

vba

1Private Sub CommandButton13_Click() '* 2 3 enzan = True 4 num = Val(TextBox1.Text) 5 6 Select Case ent 7 Case 0 8 ans = num 9 Case 1 10 ans = ans + num 11 Case 2 12 ans = ans - num 13 Case 3 14 ans = ans * num 15 Case 4 16 ans = ans / num 17 End Select 18 19 TextBox1.Text = ans 20 ent = 3 21 22End Sub

投稿2021/09/07 03:07

編集2021/09/07 03:19
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/09/07 03:25

VBA ってフォールスルーありませんでしたっけ?
Zuishin

2021/09/07 03:27

すみません、無かったですね。
milk1218

2021/09/07 03:29

ご丁寧にアドバイスいただきありがとうございます!! 確かにIfよりもselect文の方がすっきりして読みやすいです・・! 追加のご質問で大変申し訳ないのですが、頂いた文章を追記したら0表記にはならなくなったのですが イコールボタンを押すたびに(例えば8×1=64のように)どんどん掛け算されていってしまう 現象がありまして(足し算なども同様です)これは、=での処理の部分の書き方に問題があるのでしょうか・・? もし、こちらも解りそうであればお手隙にご教授頂けると幸いです・・・!
hatena19

2021/09/07 03:34

勉強の為ということなら、最低でも1時間ぐらいは自分で考えてみましょう。
hatena19

2021/09/07 05:18

まだ、考え中でしょうか。 イコールボタンのクリック時のコードの最初に、 enzan = True を挿入すればいいと思いますよ。 Private Sub CommandButton15_Click() 'イコールボタン ここで条件分岐 enzan = True num = Val(TextBox1.Text) '' 以下略
milk1218

2021/09/07 06:51

教えていただきありがとうございます!! 昨晩からずっと悩んでいた部分なのですが、なかなか解決しなかったので いただいた文章を追加してみたところ一先ず解決致しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問