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

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

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

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

Q&A

解決済

6回答

9092閲覧

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

milk1218

総合スコア20

VBA

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

0グッド

0クリップ

投稿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

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

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

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

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

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

guest

回答6

0

「・」+「2」+「5」とボタン押したらTextBoxに「0.25」と表示して欲しいですね
「・」+「2」+「5」+「・」+「0」+「・」とボタン押したらTextBoxに「0.25」と表示して欲しいですね
イメージ説明
似たような動画ありましたのでURL記載しておきます
https://www.youtube.com/watch?v=K8fXHzYv9qk
尚 この動画(1)~ (8)までありました。
参考になるとおもいます
話は変わりますが ひな鳥は目を開けた瞬間、目の前の動くものを 親鳥とおもいついていきます マクロの初心者も初めて見た構文(サンプル等)をコピペ
してマクロ実行、 サンプル道理に動いて感激します 記述されているマクロを
また、ネットで検索、これも また時間が掛かります、構文の書き方に惑わされず お互い、頑張りましょう

投稿2021/09/23 14:34

syousuke.33

総合スコア312

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

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

0

ベストアンサー

'Private Sub CommandButton11_Click() '足し算  +キー ※ 9/13修正
ここのコードを変更したことで、釣り糸が絡まった状態です
r = func(ent) という形(jinoji様より)この意味わかりますか
Functionプロシージャを呼び出しています
[+」キーを押したところで、足し算の計算しても まともな、結果は得られません
どのタイミングでFunctionプロシージャを呼び出すかがです
時をもどして、コードの方も戻してからですね。
ところで「・演算キーを押すとTextBoxが0になる。・足し算は+0という形になる
から答えは一応合っているが、掛け算、割り算、引き算の0が加算されるため
答えが0になる。」この件の問題は 解決ですか
もし未解決でしたら2回目の画像の中に解決するコードが付いています
FunctionプロシージャについてのTouTube URLを載せてみます
https://www.youtube.com/watch?v=gk7q8Nfo1i4

投稿2021/09/21 03:34

syousuke.33

総合スコア312

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

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

milk1218

2021/09/22 15:05

どこが問題点か分かりやすくご説明いただきありがとうございます!! YouTubeのリンクについても助かりました・・!
guest

0

Evaluate関数を使ったらどうですか。
ans+numを求めたかったらEvaluate(ans & "+" & num)とします。

投稿2021/09/20 15:09

ryusora

総合スコア26

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

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

milk1218

2021/09/22 15:04

ありがとうございます・・!試してみます!!
guest

0

自力で問題解決するときのテクニックを紹介します(個人の感想です)
モニターが2台あるときは活用しましょう(ノートPC画面とテレビ画面)
ノートPCしかない場合 画面を2分割します(左側Excel 右側モジュール
画面)  (ショートカットキーは画面の左半分に配置 windowsキー + ←
画面の右半分に配置 windowsキー+ →)
エクセル画面を表示してwindowsキー + ←
次にモジュール画面を表示してwindowsキー+ →
これで、左半分がエクセル・右半分がモジュール画面になる
つぎに一度モジュール画面をクリックしてください そして 「F8]キー
をクリックすると、モジュール画面に黄色いカーソルが出てきます
あとは、画像を添付しますので見てください
イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明

投稿2021/09/17 14:11

syousuke.33

総合スコア312

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

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

milk1218

2021/09/20 10:51

ご丁寧にありがとうございます・・・!!! 画像まで付けていただいてとても分かりやすいです。
guest

0

r = func(ent) という形で使うなら、

VBA

1Function func(ByVal e As Integer) As Double     '呼び出したい計算式    2 3 enzan = True 4 num = Val(TextBox1.Text) 5 6 Select Case e 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 func = ans 20 21End Function 22

投稿2021/09/17 01:22

jinoji

総合スコア4592

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

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

milk1218

2021/09/20 10:54

ありがとうございます・・! 足し算の演算キーでは出なくなりました・・・!
guest

0

まずは、以下を参考に実際にFunctionプロシージャを作ってみてください。

https://www.sejuku.net/blog/28904

それを提示いただければ、回答も付きやすいかと。

また、今回は、四則演算を行う1つのプロシージャを作りたい、ということでよろしいでしょうか。

投稿2021/09/14 00:27

hex309

総合スコア761

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

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

milk1218

2021/09/14 01:18

ご丁寧にありがとうございます!ページURLもありがとうございます! そうですね・・!四則演算を行うプロージャを作成したいと思っています!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問