「多項式やべき級数をスプレッドシートで計算したいけれど、POWERを何個も並べるのは面倒……」。そんなふうに感じたことはありませんか?
項数が増えるほど式は長くなり、係数の打ち間違いにも気づきにくくなります。公式ヘルプの例を真似ると、eの近似のつもりが「34」になることも。
この記事では、GoogleスプレッドシートのSERIESSUM関数を構文と係数の順番から解説します。SEQUENCEで係数を自動生成する式や、項数ごとの誤差表もコピペできる形で紹介しますね。
スプレッドシートのSERIESSUM関数とは?構文と引数(x, n, m, 係数)の意味
SERIESSUM関数(読み方: シリーズサム)は、べき級数の和を返す関数です。名前は「Series(級数)」と「Sum(合計)」の組み合わせ。xのべき乗に係数を掛けて全部足す計算を、1つのセルで済ませられます。
=SERIESSUM(x, n, m, 係数)
引数は4つとも必須です。公式ヘルプの「a」を、この記事では「係数」と呼びますね。
べき級数と引数の対応表
| 引数 | 意味 | 指定の例 |
|---|---|---|
| x | べき級数に代入する値 | 2、PI()/6 など |
| n | 最初の項の指数 | 0なら定数項から始まる |
| m | 項が1つ進むごとに増える指数の幅 | 1なら指数は0, 1, 2… |
| 係数 | 各項に掛ける数の配列またはセル範囲 | {5, 2, 3}、A1:A4 など |
mは「指数の増分」と覚えるのがコツ。計算される式は次の形です。
係数1 × x^n + 係数2 × x^(n+m) + 係数3 × x^(n+2m) + …
係数は低次の項から並べる・個数が項数を決める
つまずきやすいのが係数の順番です。1番目の係数がx^nに、2番目がx^(n+m)に掛かります。n=0なら定数項→1次→2次の順で、ふだんの書き方とは逆向き。
また、項数を指定する引数はありません。係数の個数がそのまま項数になり、5個渡せば5項の和に。
途中の次数を飛ばすときは、その位置に0を入れます。2x^2+1なら係数は{1, 0, 2}です。空白セルは詰めて計算されるので注意しましょう(エラー対処の節で解説)。
SERIESSUM関数の基本的な使い方
ここからは実際に数式を入れて、動きを確かめます。この節の結果は、Googleスプレッドシートで計算した値です。
多項式 3x^2+2x+5 を計算する(配列リテラル)
多項式3x^2+2x+5に、x=2を代入した値を求めてみましょう。係数は定数項の5から並べて{5, 2, 3}と書きます。
=SERIESSUM(2, 0, 1, {5, 2, 3})
結果は21です。展開すると5×2^0+2×2^1+3×2^2=5+4+12=21で、ふつうに計算した値と一致しますね。
係数を{3, 2, 5}と見た目どおりに並べると、3+2x+5x^2の値の27が返ります。エラーにならないぶん、順番の間違いには気づきにくいもの。
係数をセル範囲で指定する
係数が多いときは、セルに入れておくと管理がラクです。A1〜A4に係数を入れた例で試します。
| セル | 係数 | 対応する項 |
|---|---|---|
| A1 | 1 | x^0 |
| A2 | −3 | x^1 |
| A3 | 2 | x^2 |
| A4 | 5 | x^3 |
=SERIESSUM(3, 0, 1, A1:A4)
結果は145です。内訳は1×3^0+(−3)×3^1+2×3^2+5×3^3=1−9+18+135。セルを書き換えれば、結果も自動で更新されるのが便利なところ。
2次元の範囲も指定できます。A1:B2に「1, 2」(1行目)と「3, 4」(2行目)を入れた例です。
=SERIESSUM(2, 0, 1, A1:B2)
結果は49で、1→2→3→4の行優先で読まれました(列優先の1→3→2→4なら47)。迷わないよう、係数は1列か1行にまとめるのが安全でしょう。
SEQUENCE・FACT・ARRAYFORMULAで係数を自動生成する
ここからはスプレッドシートならではの使い方。配列を作る関数と組み合わせれば、係数を手で書く必要がなくなります。
SEQUENCE+FACTで1/n!の係数を作る
e^xの近似に使う係数は、1/0!, 1/1!, 1/2!…と続きます。項数が増えると、手で書くのはつらいところ。
そこでSEQUENCEで0から始まる連番を作り、FACT関数で階乗にしてから逆数を取ります。
=SERIESSUM(1, 0, 1, ARRAYFORMULA(1/FACT(SEQUENCE(1, 6, 0))))
結果は2.71666666666667で、eの6項近似になります。SEQUENCE(1, 6, 0)は「1行・6列・0から開始」という意味。項数を変えたいときは、2つ目の6を書き換えるだけで済みます。
WARNING
ARRAYFORMULAを外すと、結果は1になります。先頭の1項(1/0!)だけで計算され、エラーも出ません。係数を計算式で作るときは、必ずARRAYFORMULAで囲んでください。
ちなみに、Google公式ヘルプには次の例が載っています。
=SERIESSUM(1, 0, 1, {FACT(0), FACT(1), FACT(2), FACT(3), FACT(4)})
結果は34です。0!+1!+2!+3!+4!=1+1+2+6+24という階乗の和なので、eにはなりません。e^xにしたいなら、上の式のように逆数にしましょう。
縦向きの配列でも計算できます。次の式はe^2の6項近似で、結果は7.26666666666667でした。
=SERIESSUM(2, 0, 1, ARRAYFORMULA(1/FACT(SEQUENCE(6, 1, 0))))
ARRAYFORMULAで複数のxを一括計算する
1+x+x^2に、x=1, 2, 3をまとめて代入してみましょう。
=ARRAYFORMULA(SERIESSUM({1;2;3}, 0, 1, {1, 1, 1}))
結果は3行にスピルし、上から3(1+1+1)、7(1+2+4)、13(1+3+9)が返ります。{1;2;3}の代わりにA2:A4などのセル範囲を渡してもスピルしました。ARRAYFORMULAを付けないと、先頭のx=1の結果3だけになるので注意。
MAPとLAMBDAを使う書き方でも、同じ3行の結果が得られます。
=MAP({1;2;3}, LAMBDA(x, SERIESSUM(x, 0, 1, {1, 1, 1})))
「xを1つずつ取り出して計算する」流れが読み取りやすいのが、こちらの良さです。
n・mで偶数次・奇数次だけを足す
mを2にすると、指数が1つ飛ばしになります。n=0, m=2なら偶数次(x^0, x^2, x^4…)だけの和です。
=SERIESSUM(2, 0, 2, {1, 1, 1})
結果は21(1+2^2+2^4)。奇数次だけなら、n=1, m=2で指数を1, 3, 5…にします。次の節のsinの近似がこの形です。
nには小数、mには負数や0も指定できました。
| 式 | 結果 | 計算の中身 |
|---|---|---|
| =SERIESSUM(2, 0.5, 1, {1, 1}) | 4.24264068711929 | 2^0.5+2^1.5 |
| =SERIESSUM(2, 0, -1, {1, 1, 1}) | 1.75 | 1+2^−1+2^−2 |
| =SERIESSUM(2, 0, 0, {1, 1, 1}) | 3 | 全項がx^0 |
| =SERIESSUM(0, 0, 1, {7, 1, 1}) | 7 | 0^0は1扱いで定数項が残る |
sin・e^xを近似計算して項数ごとの誤差を確かめる
SERIESSUM関数の代表的な用途が、テイラー展開による近似計算です。項数を増やすと誤差がどれだけ減るのか、表で確かめてみましょう。
e^1の誤差表(項数2〜8・EXP(1)との差)
A列に項数(2〜8)を入れ、B列とC列に次の式を入れて下にコピーします。基準値にはEXP関数のEXP(1)を使いました。
B2: =SERIESSUM(1, 0, 1, ARRAYFORMULA(1/FACT(SEQUENCE(1, A2, 0))))
C2: =EXP(1)-B2
計算結果がこちら。
| 項数 | SERIESSUMの値 | EXP(1)との差 |
|---|---|---|
| 2 | 2 | 0.7182818 |
| 3 | 2.5 | 0.2182818 |
| 4 | 2.66666666666667 | 0.0516152 |
| 5 | 2.70833333333333 | 0.0099485 |
| 6 | 2.71666666666667 | 0.0016152 |
| 7 | 2.71805555555556 | 0.0002263 |
| 8 | 2.71825396825397 | 0.0000279 |
項数5・6・8はスプレッドシートの計算値、ほかは同じ計算を手元で行った値です。差の列は小数第7位までに丸めました。
項数を1つ増やすたびに、差は前の行の約3〜8分の1まで縮んでいます。8項では差が約0.00003となり、小数第4位まではeと同じ値に。必要な精度に合わせて、SEQUENCEの項数を決めるとよいでしょう。
sin(π/6)の近似
sin xのテイラー展開は、x−x^3/3!+x^5/5!−x^7/7!…と奇数次だけが並びます。そのためn=1, m=2にして、係数に符号付きの1/k!を渡しましょう。
=SERIESSUM(PI()/6, 1, 2, {1, -1/6, 1/120, -1/5040})
PI()/6は30度をラジアンで表した値です。係数は順に1/1!, −1/3!, 1/5!, −1/7!で、指数は1, 3, 5, 7と増えていきます。
結果は0.499999991869023。sin 30°=0.5との差は約−8.13×10^−9で、4項でも1億分の1未満の誤差に収まりました。
SERIESSUM関数の使い分けとエラー対処・よくある質問
最後に、似た関数との違いとエラーの対処をまとめます。エラーが出ないまま値がずれるケースも、あわせて押さえておきましょう。
POWER・SUMSQ・SUMPRODUCTとの使い分け
| 関数 | 得意なこと | SERIESSUMとの違い |
|---|---|---|
| SERIESSUM | べき級数・多項式の和 | 指数の始まりと増分、係数をまとめて指定 |
| POWER | 1つのべき乗 | x^nを1つ返すだけ。和は自分で足す |
| SUMSQ | 平方和 | 指数は2で固定 |
| SUMPRODUCT | 配列どうしの積の和 | べき乗の計算は含まない |
たとえば最初の3x^2+2x+5をPOWERで書くと、次のようになります。
=5 + 2*POWER(2, 1) + 3*POWER(2, 2)
結果は同じ21ですが、項が増えるほど式は長くなる一方。項数が多いなら、SERIESSUMの方が見通しやすいでしょう。
エラーと対処
まずはエラーの種類ごとの原因と対処から。
| エラー | 原因 | 式の例 | 対処 |
|---|---|---|---|
| #VALUE! | xが文字列 | =SERIESSUM(“abc”, 0, 1, {1, 2}) | xに数値を指定する |
| #VALUE! | 係数の範囲に文字列のセルがある | 範囲の途中に「a」など | 数値に直す |
| #VALUE! | 配列リテラルに空文字列 | =SERIESSUM(2, 0, 1, {1, “”, 2}) | “”を0に置き換える |
| #NUM! | 0の負のべき乗 | =SERIESSUM(0, -1, 1, {1, 2}) | x=0ならnを0以上にする |
| #NUM! | 負のxの分数べき | =SERIESSUM(-8, 1/3, 1, {1}) | nとmを整数にする |
| #N/A | 引数が足りない | =SERIESSUM(2, 0, 1) | 4つ目の係数を指定する |
やっかいなのは、エラーが出ないまま値がずれるケースです。代表的な3パターンを並べておきます。
=SERIESSUM(2, 0, 1, {3, 2, 5}) → 27(係数が逆順。正しくは {5, 2, 3} で 21)
=SERIESSUM(1, 0, 1, 1/FACT(SEQUENCE(1, 6, 0))) → 1(ARRAYFORMULAの付け忘れ)
=SERIESSUM(2, 0, 1, A1:A3) → 5(A1=1、A2が空白、A3=2)
3つ目は空白セルが詰めて扱われ、1+2×2^1=5になりました。0とみなすなら1+0×2+2×4=9のはずです。抜けた次数のセルには、必ず0を入力しておきましょう。
一方、配列リテラル内の""は#VALUE!になります(上の表)。同じ「空」でも扱いが違う点に注意してください。
FAQ
Q. 係数が1つだけでも使えますか?
A. 使えます。=SERIESSUM(2, 0, 1, 5) の結果は5で、5×2^0の1項だけの計算です。
Q. Excelでも同じ式が使えますか?
A. Excelにも同名の関数があります。ただし、この記事の結果はスプレッドシートで確かめたもので、Excelでの挙動は未確認です。Excelで使う場合はExcelのSERIESSUM関数の使い方を参考にしてください。
まとめ
SERIESSUM関数は、xのべき乗に係数を掛けて足し合わせる計算を、1つの式で済ませられる関数です。スプレッドシートでは、SEQUENCEやARRAYFORMULAと組み合わせると係数づくりまで自動化できます。
- 構文は
=SERIESSUM(x, n, m, 係数)で、4つの引数はすべて必須 - 係数は低次の項から並べ、個数がそのまま項数になる
- 計算で作る係数はARRAYFORMULAで囲む。外すと先頭の1項だけになる
- 空白セルは詰めて扱われるので、抜けた次数には0を入れる(2次元の範囲は行優先)
- 公式ヘルプの階乗の例は34になる。e^xの近似には1/k!を使う
- 複数のxを一度に計算するなら、ARRAYFORMULAかMAP+LAMBDAでスピルさせる
まずは誤差表の式をコピーして、項数を変えながら近似の様子を眺めてみてください。関連する数学関数もあわせてチェックすると、計算の幅がぐっと広がりますよ。

