Excel VBA 数学教室ではアフィリエイトプログラムを利用して商品を紹介しています。

【Excel VBA】べき乗・累乗

【Excel】べき乗 (累乗)・べき根 (累乗根) と指数法則

実数 (あるいは複素数) $a$ を $n$ 回掛ける演算を $a^n$ と表記し、$a$ を底、$n$ を指数とよびます。また、$a^n$ の形で表される数を $a$ のべき乗とよびます。たとえば、$2$ を $5$ 回掛ける演算を $2^5$ で表します。累乗とよぶこともありますが、累乗は指数 $n$ を整数に限定した演算です。後述するように、一般にべき乗の指数は有理数や実数、さらには複素数まで拡張できます。

Excel では「^」の記号を使ってべき乗・累乗を計算できます。「^」はキャレット (caret) とよばれる記号で、元々は校正で脱字挿入に使われていました。「^」の前に底 $a$、後ろに指数 $n$ を記述します。たとえば、$2^5$ を計算したいときはセルに

=2^5

と入力します (32 が返ります)。
 
指数 $n$ が $0$ のときは、$0$ 以外の実数 $a$ に対して $a^0=1$ と定義されています。$100^0$ を Excel に計算させてみましょう。セルに

=100^0

と入力すると 1 が返ります。$0^0$ は分野によって定義が異なりますが、Excel では「=0^0」は #NUM! エラーを返すようになっています。

指数 $n$ が負の値のとき、$a^n$ は $1$ を $a$ で $n$ 回除算した演算として定義されます (ただし、$a\neq 0$)。すなわち、
 \[\begin{align*}a^{-1}=&\frac{1}{a}\\[6pt]a^{-2}=&\frac{1}{a^2}\\[6pt]a^{-3}=&\frac{1}{a^3}\\[6pt]&\vdots\\[6pt]a^{-n}=&\frac{1}{a^n}\end{align*}\]
のように定義されています。たとえば、$4^{-3}$ は $1$ を $4$ で $3$ 回割る ($1/4$ を $3$ 回掛ける) 演算です。Excel で計算してみましょう。

=4^(-3)

と入力すると 0.01563 を得ます。

$n$ を有理数まで拡張してみましょう。$a^{1/n}$ は $a$ の $n$ 乗根、すなわち $x^n=a$ の解 $x$ として定義されます。たとえば、$a^{1/2}$ は $a$ の平方根、$a^{1/3}$ は $a$ の立方根です。一般に $a^{1/n}$ を $a$ の 累乗根 とよびます。Excel で $27^{1/3}$ を計算してみましょう。

=27^(1/3)

と入力すると 3 を得ます。$a$ が負数の場合、$n$ 乗根が定義できない場合があります。$x^3=-27$ の解は $-3$ なので、$(-27)^{1/3}$ は $-3$ です。しかし、$x^2=-25$ の解は実数範囲に存在しないので、$(-25)^{1/2}$ は定義できません。実際、キャレットを用いて

(-729)^(1/2)

を計算させると #NUM! を返します。
 
ただし、扱う範囲を複素数まで拡張すると、$x^2=-25$ の解 $5i$が存在するので、$(-729)^{1/2}$ を定義できます。複素数まで拡張されたべき演算は後述する IMPOWER関数を使って実行できます (詳細は記事の後半を参照してください)。

指数 $n$ を無理数まで拡張すれば、$n$ はすべての実数で定義されたことになります。このとき、一般に指数を $x$ で表します。$10^\sqrt{2}$ を計算してみましょう。

=10^(2^0.5)

戻り値は 25.95 です。この値は $10^1=10$ と $10^2=100$ の間にあります。有理指数を使って、もう少し範囲を狭めると、$10^{1.3}=19.95$ と $10^{1.5}=31.62$ の間にあります。とはいえ、実際にはコンピュータで無理数は扱えません。「=2^0.5」のような演算は、無理数 $\sqrt{2}$ の近似値である有理数を返していて、「=10^(2^0.5)」は $a^n$ で $n$ が有理数である場合のべき乗演算です。厳密な意味では、数値計算においては指数 $n$ を無理数に拡張できないばかりでなく、扱える桁数に制限がつくので、すべての有理数が扱えるわけでもありません。

指数法則

べき乗・累乗演算では以下の 指数法則 が成り立ちます。
 \[\begin{align*}&a^x a^y=a^{x+y}\tag{1}\\[6pt]&(a^x)^y=a^{xy}\tag{2}\\[6pt]&(ab)^x=a^xb^x\tag{3}\end{align*}\]
$x,\ y$ が整数のとき、上の公式はほとんど自明です。たとえば、
 \[10^2\cdot 10^3=(10 \times 10)\times (10\times 10\times 10)=10^5=10^{2+3}\]
が成り立つことはすぐにわかります。しかし、上の公式は任意の実数 $x,\ y$ について成立します。直感的には理解しにくいですが、指数に無理数を含んだ
 \[10^2 \cdot 10^{\sqrt{3}}=10^{2+\sqrt{3}}\]
のような式も成り立っています。Excel で左辺と右辺を別々に計算して、計算結果が等しくなることを確認しておきましょう。入力数式を見やすくするために、平方根は SQRT関数を使って求めます。左辺を計算するために

=10^2*10^SQRT(3)

と入力すると、5395.74 が表示されます。また、右辺を計算するために

=10^(2+SQRT(3))

と入力しても、5395.74 が返ります。

POWER関数

キャレット演算子の代わりに POWER関数を用いてべき乗を計算することもできます。POWER関数は

=POWER(底, 指数)

のように記述します。たとえば $3^2$ を計算したいときは

=POWER(3,2)

と入力します (9 が返ります)。11 の 3 乗根を計算するには

=POWER(11,1/3)

と入力します (戻り値は 2.223)。POWER関数を使う利点は計算式を見やすくするということです。たとえば演算子だけで

=A1^2*5^(0.2)*cos(A1)

のように複雑な数式を書くと非常に見づらいですが、

=POWER(A1,2)*POWER(5,0.2)*cos(A1)

とすれば、入力式の意味をすぐに読み取ることができます。

EXP関数

自然対数の底 $e=2.718…$ (ネイピア数) のべき乗を計算するときは EXP関数を使って

=EXP(指数)

と入力します。$e$ を底、指数に 1 を指定して

=EXP(1)

と記述すると $e$ の値 (2.718 …) が得られます。

=EXP(1/2)

とすると $e$ の平方根 1.648 … が返ってきます。

IMPOWER関数

キャレット演算子やPOWER関数では、底や戻り値が複素数であるようなべき乗を扱うことはできません。複素数まで拡張されたべき乗演算は IMPOWER関数を用いて実行します:

=IMPOWER(底, 指数)

底には数値または文字列形式で表された複素数を指定できます (複素数を指定する場合は引数をダブルクォーテーションで括ってください)。たとえば、$(1+i)^3$ を計算したい場合は

=IMPOWER("1+i",3)

と入力します (戻り値は “-2+2i”)。底、指数ともに実数であっても、戻り値が虚数や複素数となることもあります。たとえば、$-25$ の平方根は $5i$ です。Excel で確かめてみましょう。

=IMPOWER(-25,0.5)

戻り値は “3.06287113727155E-16+5i” となって、実数部に僅かな誤差が生じます (“E-16” は $10^{-16}$ を表しています)。

【VBA】べき乗・累乗計算

一般的にVBAでは、累乗・べき乗を「^」(キャレット)を使って計算します。たとえば、$10^2$ は「10^2」で計算できます。

Sub PowerSample1()
    'キャレットでべき乗を計算
    Debug.Print 10 ^ 2
End Sub

'100

ワークシート関数の Power を呼び出してべき乗を計算することもできます。

Sub PowerSample2()

    Dim x As Double

    'ワークシート関数で13の1.5乗を計算
    x = WorksheetFunction.Power(13, 1.5)
    
    Debug.Print x

End Sub

'46.8721665810319

底が複素数であるときは、ワークシート関数の ImPower を呼び出してください。たとえば、$(1+2i)^3$ を計算するときは、以下のようなコードを書きます。

Sub PowerSample3()

    Dim a As Variant, b As Variant

    '複素数1+2i
    a = WorksheetFunction.Complex(1, 2)
    
    'ワークシート関数で(1+2i)^3を計算
    b = WorksheetFunction.ImPower(a, 3)

    Debug.Print b

End Sub

'-11-2i

戻り値が複素数となるようなべき乗計算においても、WorksheetFunction.ImPowerメソッドは有用です。たとえば、$-9$ の平方根は以下のように計算できます。

Sub PowerSample4()

    Dim c As Variant
    
    'ImPower関数で-9の平方根を計算
    c = WorksheetFunction.ImPower(-9, 0.5)

    Debug.Print c

End Sub

'1.83772268236293E-16+3i

エクセルや数学に関するコメントをお寄せください