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

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

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

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

Q&A

解決済

3回答

1600閲覧

VBA セルに入力された演算子によって自動で四則演算するfunctionが作りたい

dd31

総合スコア2

VBA

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

0グッド

0クリップ

投稿2021/10/08 06:44

素人ながら、以下のようなfunctionを作成してみたのですが
実際に使ってみると#VALUE!の表示になってしまいます。

参考に、四則演算を自動認識するfunctionの例や
誤りを指摘していただけると幸いです。

宜しくお願い致します。

Public Function 計算(値1 As Integer, 演算子 As Integer, 値2 As Integer) As Integer
If 演算子 = "+" Then
計算 = "値1" + "値2"
ElseIf 演算子 = "−" Then
計算 = 値1 - 値2
ElseIf 演算子 = "×" Then
計算 = 値1 * 値2
ElseIf 演算子 = "÷" Then
計算 = 値1 / 値2
Else: 計算 = "Error"
End If
Next
End Function

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

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

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

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

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

guest

回答3

0

解決済みですが、計算式の文字列をパラメータにすると、計算結果を返却する関数があります。
Evaluate メソッド
Excel VBAにおける伝家の宝刀。Evaluateの使い方

投稿2021/10/11 06:05

編集2021/10/11 06:35
sazi

総合スコア25206

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

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

dd31

2021/10/11 06:14

わざわざありがとうございます!
guest

0

ベストアンサー

いろいろ間違いがあります。

演算子 As Integer
演算子は、"+" "−" ・・などの文字なので Integer ではなく String にします。

計算 = "値1" + "値2"
引用符(")で囲んだら単なる文字列です。文字列は加算できません。

計算 = "Error"
"Error"という文字列も返すのに、関数の返り値は
計算(値1 As Integer, 演算子 As Integer, 値2 As Integer) As Integer
Integer(数値)になっているのでエラーになります。
数値も文字列も返したいなら、Variant で宣言します。

Next
ForがないのにNextだけなら構文エラーになります。

上記を修正して動作するようにすると、

vba

1Public Function 計算(1 As Integer, 演算子 As String,2 As Integer) As Variant 2 If 演算子 = "+" Then 3 計算 =1 +2 4 ElseIf 演算子 = "-" Then 5 計算 =1 -2 6 ElseIf 演算子 = "×" Then 7 計算 =1 *2 8 ElseIf 演算子 = "÷" Then 9 計算 =1 /2 10 Else 11 計算 = "Error" 12 End If 13End Function

投稿2021/10/08 07:13

hatena19

総合スコア33795

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

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

dd31

2021/10/08 07:48

めちゃくちゃわかりやすいです! ご丁寧にありがとうございます! 最後に一点なのですが、"-"の指定に関して エクセルの入力されている"-"の記号が大文字の場合も対応できるようにしたいのですが VBAの中に大文字の"ー"を入力すると"?"に自動で変わってしまい、入力ができません。 これについてご意見いただけないでしょうか? 宜しくお願い致します。
hatena19

2021/10/08 08:04

"−" は機種依存文字(ShiftJISにない文字)ですので、VBAエディター上では表示できません。 "―" を使えばどうでしょう。 どうしても "−" がいいというなら、 ChrW で下記のようにすれば "−" ということになります。 ElseIf 演算子 = ChrW(8722) Then
guest

0

まず、関数の最初の部分ですが、以下のようになっています
引数「演算子」はコードを見ると記号なので、String型ではないでしょうか?
また、戻り地がIntegerですが、これだと整数になります。
Else句で「Error」を返すようにしているので、戻り値のデータ型はVariant型ではないでしょうか。

VBA

1計算(値1 As Integer, 演算子 As Integer, 値2 As Integer) As Integer

また、以下ですが、「値1」「値2」は引数名なので、ダブルクォーテーションで囲まないでください。

VBA

1If 演算子 = "+" Then 2 計算 = "値1" + "値2"

投稿2021/10/08 07:04

hex309

総合スコア761

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問