🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel PRODUCT 関数 — 範囲まるごとを掛け合わせる(そして単なる * ではない理由)

|

Excel PRODUCT 関数 — 範囲まるごとを掛け合わせる(そして単なる * ではない理由)

TL;DRPRODUCT は渡したものすべてを掛け合わせて 1 つの数値にします。 =PRODUCT(A1:A5)A1×A2×A3×A4×A5 です。SUM の掛け算版だと考えてください。 =A1*A2*A3*A4*A5 よりこちらを選ぶ理由は、入力が短くて済むからではありません — PRODUCT は文字列と空白セルを無視するのに対し、* は文字列でエラーになり、セルが 1 つでも空になった瞬間に積全体を 0 にしてしまう からです。範囲を掛け合わせるとき、 =PRODUCT(1+range) で成長率を合成するとき、そして紛れ込んだ空白が手書きの * チェーンを台無しにしかねないあらゆる場面で活躍します。

=PRODUCT(A1:A5)        ' 範囲内のすべての数値を掛け合わせる -> 1 つの値
=PRODUCT(2, 3, 4)      ' 引数でも動く -> 24
=PRODUCT(A1:A5)*1.2    ' 範囲とスカラーを組み合わせる -> 積を出してから +20%
=PRODUCT(1+B2:B13)-1   ' 12 か月ぶんの月次成長率を合成して通算リターンに

「Excel PRODUCT 関数」で検索すると、たいていのページは =PRODUCT(number1, number2, …) を示して、掛け算をするという以外に知るべきことはないかのように先へ 進みます。しかし、掛け算がすべてなら、あなたはただ * と打てばよく、二度と気に 留めることもないはずです。PRODUCT が存在する理由 — そして、ときにモデルを静かで 誤った 0 から救う理由 — は、実際の範囲に紛れ込む厄介なもの、つまり予想外の文字列や、 たまたま空になっているセルを、どう扱うかにあります。このページはそこから始めます。

この記事で学べること

  • 考え方の軸:SUM+ に対する存在であるように、PRODUCT× に対する存在
  • 空セルが 1 つあるだけで =A1*A2*A30 を返すのに、PRODUCT はそうならない理由
  • PRODUCT が範囲内の文字列を #VALUE! にせず読み飛ばす仕組み
  • 合成のテクニック:累積成長を求める =PRODUCT(1+range)
  • PRODUCTSUMPRODUCT ではない こと、そしてそれぞれの使いどころ
  • 判断のポイント:素の * チェーンのほうが本当に適したツールになる場面

考え方の軸:PRODUCT は SUM の掛け算版

あなたはすでに、A1+A2+A3+… と書かずに列を合計する SUM を信頼しています。PRODUCT は掛け算についてまったく同じ発想です。範囲(または数値のリスト)を指し示せば、それらを すべて掛け合わせて 1 つの結果にします。SUM について知っていること — 範囲でも、個々の セルでも、定数でも、それらの混在でも受け取れること — は、そっくりそのまま当てはまります。

双子が分かれるのは、数値でないもの の扱いであり、その違いこそが PRODUCT の実用的な 価値のすべてです。SUMPRODUCT も、範囲の中の文字列と空白は静かに無視します。しかし、 その背後にある 演算子 は、範囲がきれいでないときにまったく違う振る舞いをします。+ は 空白を 0 として扱い(無害です — ゼロを足しても何も変わりません)、× も空白を 0 と して扱います(致命的です — ゼロを掛けると答えが壊れます)。この非対称性さえ握っておけば、 このページの残りは自然と理解できます。

空セルの罠:=A1*A2*A3 が 0 を返しうる理由

PRODUCT を知る価値を生むのが、この失敗パターンです。A1=5A2=4、そして A3 の場合(ゼロではなく、単に一度も入力されていない状態)を考えます。

=A1*A2*A3        ' -> 0        (空セルが 0 に変換され、積が消える)
=PRODUCT(A1:A3)  ' -> 20       (空セルは無視 -> 5 × 4)

算術式の中では、空セルは 0 として評価されます。その 0 を掛ければ、丹念に組み上げた積は 跡形もなく崩れ — しかも警告のエラーは 1 つも出ません。まだ入力途中の列にまたがる長い * チェーンでは、未入力の値がたった 1 つあるだけで、全体が静かにゼロになります。PRODUCT は 空白を完全にまたぎ越し、実際にそこにある数値だけを掛け合わせます。

これは、範囲全体にわたって + ではなく SUM に手を伸ばすのと同じ理由です。短いからでは なく、実際のスプレッドシートにつきものの「穴」に強い からです。範囲を掛け合わせる モデルが、素の * でそれをやるべき場面は、まずありません。

範囲内の文字列:エラーではなく読み飛ばし

PRODUCT がそつなく処理する 2 つめは、紛れ込んだ文字列です。数量の範囲のあるセルに "N/A" と打ち込まれていたとします。

=A1*A2*A3        ' -> #VALUE!   (× は文字列 "N/A" を掛けられない)
=PRODUCT(A1:A3)  ' -> 20        (範囲内の文字列は無視される)

PRODUCT範囲や配列 を走査するとき、数えるのは数値だけです — 文字列、論理値 (TRUE/FALSE)、空白は読み飛ばされます。* 演算子にはそんな寛容さはありません。 変換できない文字列に当たった瞬間に #VALUE! を返し、あなたの数式は死にます。

知っておく価値のある鋭い境界が 1 つあります。この寛容さが効くのは、参照した範囲の にある文字列 に対してです。数値に変換できない文字列を 直接の引数 として渡した場合 — =PRODUCT(2, "cat", 3) のように — は、やはりエラーになります。PRODUCT に「数値として 扱え」と告げたものを手渡しているからです。数値に 見える 文字列("6")は変換されて 掛け合わされます。ルールはこうです。範囲 の中の文字列は無視される。変換できない文字列を リテラルの引数 として渡すとエラーになる。

合成のテクニック:=PRODUCT(1+range)

PRODUCT の実務で最も役立つ使い道は、数量を掛けることではありません — 成長の合成 です。 B2:B13 に 12 か月ぶんの月次リターン(たとえば 2%-1%3%、…)があるとき、その年の 通算リターンは合計ではありません。(1 + 各月) を次々に掛け合わせて得られる値です。

=PRODUCT(1+B2:B13)-1     ' 月次リターンを合成して年間の通算値に

1+B2:B13 は各リターンを成長係数(1.020.991.03、…)に変え、PRODUCT がそれらを 掛けて累積係数にし、-1 がパーセンテージへ戻します。同じパターンで、金利、価格変動、生存率、 あるいは前月比の乗数を何でも合成できます。(新しい Excel ではこれは自動でスピルします。古い バージョンでは Ctrl+Shift+Enter で配列数式として入力してください。)この 1 行は、途中経過の 積を並べた作業列をまるごと置き換えます。財務モデルが数量の掛け算よりはるかに PRODUCT に 頼るのは、このためです。

PRODUCT は SUMPRODUCT ではない

名前がいとこ同士に見えるため、人は間違ったほうに手を伸ばします。この 2 つは本当に別の仕事を します。

=PRODUCT(A1:A3)           ' A1 × A2 × A3        -> 3 セルの積 1 つ
=SUMPRODUCT(A1:A3, B1:B3) ' A1×B1 + A2×B2 + A3×B3 -> 要素ごとに掛けてから合計

PRODUCT は 1 組の数値を掛けて 1 つの値にします。SUMPRODUCT は 2 つ(以上)の範囲を 要素ごとに 掛け、その結果を 合計 します — 「何もかも掛ける」エンジンではなく、 加重合計(数量 × 単価、の総和)のエンジンです。ドット積、加重平均、条件付きカウントを 計算したいなら SUMPRODUCT です。文字どおり a × b × c が欲しいなら PRODUCT です。 加重合計のパターンは SUMPRODUCT ガイド を参照して ください。

条件付きの積

PRODUCT には SUMIFS のような組み込みの IF はありませんが、条件に合わない行を 1 (乗法の単位元。掛けても積を変えません)にした配列を渡せば、条件を満たす値だけを掛け 合わせられます。

=PRODUCT(IF(A2:A10="West", B2:B10, 1))   ' "West" の行だけを掛け合わせる

West 以外の行はすべて 1 を出して脱落し、West の行どうしが掛け合わされます。これは SUMIF の「一致した行だけ足す」という発想の掛け算版で、条件付き合計での 0 の役割を、 ここでは 1 が担います。

判断のポイント:素の * が勝つとき

PRODUCT が空白と文字列に寛容なのは長所です — ただし、それが問題を隠すまでの話です。範囲の あるセルが 常に数値を持つべき なら、そこにある空白は 気づきたい データエラーであり、 PRODUCT がそれを静かに読み飛ばすと、壊れた上流の数式を覆い隠してしまいます。その場合は、 0#VALUE! を返す素の =A1*A2*A3 のほうが、大声で失敗してくれるぶんありがたいのです。

だから正直なルールはこうです。またぎ越したい「穴」や混在した内容が範囲に正当に含まれる ときは PRODUCT を使う。すべてのセルが数値であるべきで、むしろエラーを見たいときは * を 使う。 既知の 2〜3 個のセルなら、* のほうが読みやすくもあります — =length*width*height=PRODUCT(A1:A3) より意味が伝わります。PRODUCT が真価を発揮するのは、範囲、合成、 そして紛れ込んだ空白が答え全体を奪いかねないあらゆる場面です。

ExcelMaster が役立つ場面

本物の数値を期待したのに 0#VALUE! が返ってくる積は、空白か紛れ込んだ文字列を見つける までは謎に見える、あの手のバグです。ExcelMaster に「掛け算の数式がゼロを返すのは なぜ?」と尋ねれば、チェーンをたどって空セルに行き当たり、=PRODUCT(...) に書き換えて、その 「穴」が結果を汚すのを止めます。「この 12 か月ぶんの月次リターンを年間の数字に合成して」と 伝えれば、成長係数をあらかじめ組み込んだ =PRODUCT(1+B2:B13)-1 を配線してくれます。

よくある質問

Excel の PRODUCT 関数は何をしますか?

PRODUCT は渡したすべての数値を掛け合わせ、1 つの結果を返します。=PRODUCT(A1:A5)A1×A2×A3×A4×A5 と同じで、=PRODUCT(2,3,4)24 を返します。範囲、個々のセル、定数、 あるいはそれらの混在を受け取れます — ちょうど SUM と同じで、足す代わりに掛けるだけです。

PRODUCT と * 演算子の違いは何ですか?

掛け方は同じですが、厄介な範囲の扱いが違います。PRODUCT は範囲内の文字列と空白セルを 無視 します。* 演算子は文字列に当たると #VALUE! を返し、空セルを 0 として扱う — つまり積全体を静かに 0 にしてしまいます。「穴」がありうる範囲には PRODUCT を、すべての セルが数値であるべきでエラーを見たいときは * を使いましょう。

PRODUCT の数式が 0 を返すのはなぜですか?

ほぼ必ず、いずれかのセルが実際に 0 を含んでいるからです(空白ではありません — 空白は PRODUCT が無視します)。ゼロを掛けると積全体がゼロになります。範囲に本物の 0 がないか 調べてください。そのセルを飛ばしたいのなら、ゼロを消すか、そのセルを範囲から外します。

PRODUCT は SUMPRODUCT と同じですか?

いいえ。PRODUCT は 1 組の数値を掛けて 1 つの値にします。SUMPRODUCT は 2 つ以上の範囲を 要素ごとに掛け、その結果を 合計 します — 数量 × 単価の総和のような加重合計のためのもの です。役割が違います。SUMPRODUCT ガイド を参照して ください。

PRODUCT で成長率や金利を合成するには?

各率に 1 を足して成長係数にし、PRODUCT ですべて掛けてから、1 を引きます: =PRODUCT(1+B2:B13)-1。これで月次リターン、金利、価格変動を累積値に合成できます — 期間 ごとのパーセンテージを組み合わせる正しい方法です(単純に足すことはできません)。

検証環境

検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-26。

関連ガイド: Excel FACT (Factorial) · Excel COMBIN & PERMUT · Excel SUMPRODUCT · Excel ROUND · Excel POWER & SQRT