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

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

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

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

解決済

VBAでの電卓作成 関数で計算式(足し算、引き算、割り算、掛け算)を呼び出すやり方

milk1218
milk1218

総合スコア20

VBA

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

6回答

0評価

0クリップ

2537閲覧

投稿2021/09/13 15:42

編集2021/09/17 01:08

VBAで、足し算・引き算・掛け算・割り算の演算式を関数化したいです。
これまではFunctionプロシージャなどは使わずに、それぞれにSelect Case ent
case 1~などを書いていましたが、ここを関数化したいと思っています。

戻り値があるので、Dim オブジェクト名 As 戻り値のデータ型
オブジェクト名 = プロシージャ名
というような記述になると思っているのですが、この場合何が引数で戻り値なのかも認識が危ういです・・・

周囲にVBAを履修している者がいないので、ご教授いただければ幸いです。

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

・演算キーを押すとTextBoxが0になる。 ・足し算は+0という形になるから答えは一応合っているが、掛け算、割り算、引き算の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それ以外 条件を指定した結果を保存 Function func(ByVal ent As Integer) As Double     '呼び出したい計算式    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 End Function '上記がGeneralに記載している部分 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 '2~9ボタンも上記と同様 End Sub Private Sub CommandButton11_Click() '足し算  +キー ※ 9/13修正 ent = 1 Dim r As Double r = func(ent) TextBox1.Text = r End Sub '+、×、÷ボタンも上記と同様 1,2,3,4で条件分岐 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 ent = 0          '=後に再度演算キーを押した際に結果を加算されないようにするため ans = 0 End Sub

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

・+は1,-は2,×は3,÷は4にして条件分岐しています
・作っているのは電卓です TextBoxには押した数値キーの数字(num)と演算結果(ans)が出ます
・下記が四則演算を関数化する前の演算の部分の書き方です。こちらだと正常に動きます。

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 '-は2,*×は3,÷は4 後は同じ記述

End Sub

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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