質問: if関数でempty値を設定する方法。 こんにちは。 if関数でempty値の設定方法を知りたいと思っています。 ゼロと値なしを分けるため、セルに対して値なしで有れば if関数にて""をセットしていますが、sumproductで集計を 掛けた場合にエラーとなります。 そこで""ではなくempty値をセットしたいのですが、 方法をご存知の方いらっしゃれば宜しくお願い致します。 (例としては下記です。) =if(a1>5,"",a1)をb1にセットし、 これを複数セル(b2:b10)に複写します。 (a1:a10)は0から9までの連番を入れます。 また、(c1:c10)には0から9までの連番が入っています。 b列には結果として0,1,2,3,4,5,空白となります。 これをsumproductにて集計を掛けると =sumproduct((c1:c10)*(b1:b10)) #valueエラーとなります。 しかしながら、b7:b10を削除してempty値とすると 正常に計算されます。 excel2000/excel2002です。 「empty値」と「""」と「0」の値の件では度々このようなミスをしていましたので、この際解決したいと思っています。 尚、条件としてゼロは値として必要で、表示しなければなりません。 値なしは値なしとして空白を表示しなければなりません。 ご存知の方宜しくお願い申し上げます。
回答: こんにちは。wendy02です。 もともと、sumproduct関数 は、製作者の意図する本来の使い方とは違う使い方をされて、広まっているようなのです。それと、私が調べた結果では、sumproduct関数は、前回書いたように、独特の癖があって、 ・中にある演算から計算をし始める のです。当たり前のような気がしますが、この引数は、バラメータ配列という仕組みになっているからなのです。しかし、そのパラメータ配列の個々の配列要素を、どのように処理するか、というのは作者の考え方です。そして、これは、sum関数の古い初期の頃の名残りを踏襲していると思っています。なぜ、そうしたかという理由は、ご質問のように、セルに文字を書き入れるためだそうです。 私は、時折、関数の仕様や歴史を調べています。そして、今、私は、vbaで本当に自分が思ったとおりに再現できるかを、時々練習しています。 以下の場合は、中にある演算から計算をし始める、という原則からすると、文字列や"" が入ると、エラーが出てしまいますね。 =sumproduct((b1:b10)*(c1:c10)*(a1:a10<=5)) 以下の場合は、 =sumproduct(b1:b10,c1:c10,(a1:a10<=5)) ↓ =sumproduct(b1:b10,c1:c10,(a1:a10<=5)*1) とすると、おそらく計算が可能になるはずです。 これ以上複雑になっても、裏技的な解決方法はありますが、それは、もし、ご質問があれば考えていきます。あまり複雑なものは、vbaのユーザー定義関数で作ったほうが簡単なこともあります。配列数式は、excel のversion によっては、配列データ数が、5,500程度を超えると、エラーを出すことがあります。ただ、実務上は、前回書いたように、スペースが許す限り、数式は分解し補助列に出したほうがよいです。数式の修正が行いやすいからです。私も、配列数式は使いますが、自分で作っておいて、修正が出来なくなることが時々あります。