dポイントプレゼントキャンペーン実施中!

Excelでの累乗について教えてください。

VBAでは「MsgBox CStr(-2 ^ 2)」 は「-4」を返しますが
セルに「=-2^2」と入力すると「4」を返します。

ワークシートでの計算結果が正しくないのですがなぜでしょうか?

A 回答 (2件)

演算子が計算される優先順序の違い,言い換えるなら単純に設計に違いです。



ワークシートの計算における順番:
--エクセルのヘルプより抜粋-----------
1 つの数式で複数の演算子を使用する場合、次の表に示した順序で計算が実行されます。数式に同順位の演算子が含まれる場合 (たとえば、乗算演算子と除算演算子が含まれる場合)、左から右の順に計算が実行されます。

: (コロン)
(スペース 1 つ)

, (カンマ)
参照演算子
– 負の値 (-1 など)
% パーセンテージ
^ べき算
* または / 乗算または除算
+ または - 加算または減算
& 文字列の結合または連結
= < > <= >= <> 比較演算子
------------
以上によりマイナス負号が先に計算され(-2),その2乗が計算されます。


VBAの計算における順番:
--VBAのヘルプより抜粋-----------
異なる種類の演算子が 1 つの式の中で使われている場合、算術演算子、比較演算子、論理演算子の順序で評価されます。(中略) 算術演算子および論理演算子は、次に示す順序で評価されます。

算術演算子
指数演算 (^)
マイナス符号 (-)
乗算と除算 (*、/)
整数除算 (\)
剰余演算 (Mod)
加算と減算 (+、-)
文字列連結 (&)
---------
以上により2乗(^2)が先に計算され,そのマイナスが計算結果になります。
    • good
    • 0
この回答へのお礼

有難う御座います。

ワークシートで正しく計算させるには以下のようにする必要があるようですね。
=-((2)^2);-4
=((-2)^2);4
またワークシートの式をそのままVBAに渡すときは要注意ですね。
純粋に数学的な表記が出来ないのは不便・・というか利用者にとっては殆どバグに近いような気がします
なぜそうなっているのか・・という新たな疑問が持ち上がります
因にMACのNumbersやOpen Officeのスプレッドシートも同じ仕様でした。

お礼日時:2011/09/28 07:06

VBAに関することは知りませんが…


Excel 2002 のヘルプ「演算子の優先順位」によれば、次のように記載されています。

 演算子      内容
-----  --------
  –      負の値 (-1 など)
  %      パーセンテージ
  ^      べき算
* または /  乗算または除算
+ または -  加算または減算

従って、私は次のように理解しています。
=10-2^2 あるいは =0-2^2 の場合、「-」は減算を意味しているので、それぞれ 6 あるいは -4 を返します。つまり、=10-(2^2) あるいは =0-(2^2) と同じこと。
しかし、=-2 の「-」は直後の数値が負であることを意味しているので、式 =-2^2 は =(-2)^2 と同じ計算をするために 4 が返るのだ、と。
    • good
    • 0
この回答へのお礼

有難う御座います。
VBAとワークシートで「演算の優先順位」の仕様が異なる事にすごく違和感があります。
仕様に注意し数学的表記通りに演算されていないという事があるという事を肝に銘じます。

お礼日時:2011/09/28 07:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!