- ベストアンサー
エクセルの計算式
数量計算書を作っています。 例えば A1に数式「25+5×6」のような数式を入れ、 B1に答えの「55」を表示させる方法を、おしえてください。 以前はA1に「25+5×6」と数式を入れ、B1に「=25+5*6」と入れて作っていましたが、 計算式の数値の訂正や、変更が多く、1回々B1の方も変えなくてはならず、かなり苦労をしています。 良い方法をお教えください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
と言う訳で、逆にした物。 Public Function GyakuHenkan(Tgt As Range) As Variant Fmr = Tgt.Text Ans = "" For i = 1 To Len(Fmr) moji = Mid$(Fmr, i, 1) Select Case moji Case "0": Ans = Ans & "0" Case "1": Ans = Ans & "1" Case "2": Ans = Ans & "2" Case "3": Ans = Ans & "3" Case "4": Ans = Ans & "4" Case "5": Ans = Ans & "5" Case "6": Ans = Ans & "6" Case "7": Ans = Ans & "7" Case "8": Ans = Ans & "8" Case "9": Ans = Ans & "9" Case "+": Ans = Ans & "+" Case "-": Ans = Ans & "-" Case "×": Ans = Ans & "*" Case "*": Ans = Ans & "*" Case "÷": Ans = Ans & "/" Case "/": Ans = Ans & "/" Case "{": Ans = Ans & "(" Case "{": Ans = Ans & "(" Case "[": Ans = Ans & "(" Case "[": Ans = Ans & "(" Case "}": Ans = Ans & ")" Case "}": Ans = Ans & ")" Case "]": Ans = Ans & ")" Case "]": Ans = Ans & ")" Case Else: Ans = Ans & moji End Select Next GyakuHenkan = Evaluate(Ans) End Function 同じように「標準モジュール」に「コピペで貼り付け」して下さい。「見ながら手で入力」してはいけません。 今度は、A1に [46-{14+120÷40-(8×5-30)}÷7]÷9 と「文字列」で入力して、B1に =GyakuHenkan(A1) と入力すると、B1に「5」と言う答えが表示されます。 A列とB列が逆になっているので注意。 また、今回は「記号や数字を全角文字で入力した場合」にも対応しています。
その他の回答 (4)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
VBAでエラーが出るのは「入れるべき半角スペースを、ちゃんと入れてない」からだと思います。 回答を見ながら手で入力するのではなくて、回答の画面を開いて、範囲指定して「コピー」して、VBAに「ペースト」して下さい。 >ちなみに二重カッコ ”{(” の表示もご教授頂いたVAEの中の >Case”(”:Ans=Ans&"(" >で良いのでしょうか? エクセルの計算式は、「{ }」(中括弧)、「[ ]」(大括弧)は使えません。 数学では {(1+2)×3+4}×5 のように、小括弧の外側を中括弧にしますが、エクセルでは =((1+2)*3+4)*5 のように、すべて小括弧(普通の括弧)で書きます。 これを、数学の式のように「外側の括弧は中括弧にする、更にその外側は大括弧にする」となると、簡単には行きません。 式を先頭から調べていって、括弧の階層を数えて、一番深い階層を小括弧、その次を中括弧、その次を大括弧にする、と言う「本格的な式の解析」が必要になります。 提示した回答のプログラムは、単に「エクセルの四則演算の半角記号」を「算数の四則演算の全角文字」に置き換えているだけで、何もしていません。 そういう訳で、「{ }」や「[ ]」などの中括弧、大括弧も何とかしたいなら「今回の逆」をやらないといけません。 つまり「A1に算数の式を書いたら、B1にエクセルの計算式が入り、エクセルがB1に答えを表示してくれる」と言うように作らないといけません。 この場合、提示したプログラムとは「完全に逆」になりますから、全面的に変更しないといけません。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
と、いう訳で。 エクセルからVisual Basic Editorを開いて、Visual Basic Editorで、標準モジュールを挿入し、以下の関数をコードとして打ち込んで下さい。 Public Function Henkan(Tgt As Range) As String Fmr = Tgt.Formula Ans = "" For i = 1 To Len(Fmr) moji = Mid$(Fmr, i, 1) Select Case moji Case "=": If i <> 1 Then Ans = Ans & "=" Case "+": Ans = Ans & "+" Case "-": Ans = Ans & "-" Case "*": Ans = Ans & "×" Case "/": Ans = Ans & "÷" Case Else: Ans = Ans & moji End Select Next Henkan = Ans End Function 打ち込んだら保存して下さい。 保存したら、B1セルに =25+5*6 と入力します。 次に、A1セルに =Henkan(B1) と入力します。 すると、A1セルに 25+5×6 と表示される筈です。 なお、B1セルに、文字列として 5*3+6 と入力すると、A1セルは 5×3+6 になります。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
A1に文字列として「25+5×6」って文字列を入れたら、B1に「55」と言う答えが欲しいのですよね? しかも掛け算や割り算は「*」「/」ではなく「×」「÷」で入力したい、と? こういう場合は「逆にした方が作業が楽」です。 つまり「B1に計算式『=25+5*6』を入力したら、B1に55と表示され、A1に『25+5×6』と表示される」にしましょう。 逆にしたら、漢字変換で「×」や「÷」を入力しなくて済みますし、B1部分は「エクセルの基本機能」で済みます。 後は「B1に入力された計算式を、どうやって普通の算数の式にするか?」だけを考えればよいです。
お礼
早速のご教示ありがとうございます。(_ _) 早速試してみたいと思います。 ちなみに二重カッコ ”{(” の表示もご教授頂いたVAEの中のCase”(”:Ans=Ans&"(" で良いのでしょうか? 試してみます。 有難うございました。 分らなかったら、またよろしくです。
補足
chie65535さんありがとうございました。 早速ためしてみたのですが、 教えて頂いたVBEの4行目の For i=1 To Len(Fmr) のToの部分に 「コンパルエラー:修正候補ステートメントの最後」と出て その行が赤くなります。 ちなみに、7行目は Case”=”:If i <> 1 Then Ans=Ans&"=" の<>部分に 「コンパルエラー:修正候補:式」と出てその行が赤くなります。 8行目~12行目までは ”+”、”-”、”×”、”÷”部分に 「コンパルエラー:修正候補 ステートメントの最後」 と出てやはりその行が赤くなります。 とりあえず書き込んで、ワークシートのB1セルに =25+5*6と書き込んで A1セルに 「=Henkan(B1)」と打ち込んだところ A1セルに 「#Name?」と表示されます。 教えられた通りに打ち込んだつもりなのですが、どこが悪いのでしょうか? お手数でしょうが、もう一度ご教授ください。 宜しくお願いいたします。
- kagakusuki
- ベストアンサー率51% (2610/5101)
>計算式の数値の訂正や、変更が多く、 その様な場合は、数式の中に「25」、「5」、「6」といった数値を、一々、入力するのではなく、B1セルに例えば、 =C1+D1*E1 等の様に、入力しておいた上で、C1セルに「25」を、D1セルに「5」を、E1セルに「6」を入力する様にし、数値が変更された際には、C1、D1、E1の各セルに入力されている値を書き換える様にされると良いと思います。
お礼
早々のご教示ありがとうございます。 参考にさせていただきます。 ありがとうございました。
お礼
Chie65535さん 大変有難うございました。(_ _) 完璧に表が出来上がりました。 迅速丁寧な回答、心から感謝いたします。 これで、煩わしさから解放されます。^-^v