いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Excel)式の結果を除いて集計する

 Excelで、式の結果として表示されている値以外の値を集計する方法、言い換えれば値そのものが入力されているセルだけを集計する方法についてです(逆に式の結果だけを集計することもできます)。
 はじめからSUBTOTAL関数を駆使すればこのような集計は可能ですが、SUM関数などで集計を行っている場合に手直しすることなく検算したい、といった場合に使えるかもしれません。

  • ISFORMULA関数とNOT関数を利用して、式を入力しているセルを除いて集計することができます。
  • ただし「=3」といった形で入力されているセルも集計から除かれますので注意が必要です。

手順

f:id:accs2014:20200118212911p:plain:right:w350

 C列に数値が入力されていますが、一部SUM関数で小計が出力されているセルがあります。
 そこでC11セルに合計(総計)を表示したいのですがどうすればよいでしょうか。
 C6とC10に入力されている式がSUBTOTAL関数であれば、同様にSUBTOTAL関数を使って集計する(SUBTOTAL関数の結果を避けて集計してくれるため)ことができますが……

f:id:accs2014:20200118212916p:plain:right:w550

 一例としてC11に次のように入力します。

=SUM(C3:C10*NOT(ISFORMULA(C3:C10)))

 ISFORMULA関数とNOT関数をネストすることで、それぞれのセルが式なのかどうかを判定し、式でないもの(数値そのもの)は1(合計に含める)、式であるものは0(合計に含めない)と判定した上で合計を求める、という式になっています。
 

f:id:accs2014:20200118212922p:plain:right:w350

 結果はこうなります。
 注意点としては「=3」といったセルも式として扱われるため集計から外れることが挙げられます。
 また、当然ですがNOT関数を外せば逆に式の結果だけを集計することができます。
 

 なお、空白セルがあってもエラーにはなりませんが、文字列が含まれているとエラーになります。
 これを避けたい場合は次のようにします。

=SUM(IFERROR(N(C3:C10*1),0)*NOT(ISFORMULA(C3:C10)))

 「*1」が気になりますが、N関数の引数を単純に配列にするだけでは配列が戻らない(ISEVENやISODD関数と同じ)ためこうすることが必要です。