• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルSUMの計算を効率的に行う)

エクセルSUMの計算を効率的に行う方法

kagakusukiの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 回答番号:ANo.3の続きです。  SUMPRODUCT関数は本来は配列の積の和を計算するための関数なのですが、これを応用しますと、 SUMPRODUCT((判定式1)*(判定式2)*セル範囲) という様な形式とする事で、複数条件に該当するセルの値のみの合計値を求める事も出来ます。  例えば、 =SUMPRODUCT((A2:A5=3)*(B3:B6>0)*C2:C5) という数式は、パソコンの内部で =(A2=3)*(B2>0)*C2 +(A3=3)*(B3>0)*C3 +(A4=3)*(B4>0)*C4 +(A5=3)*(B5>0)*C5 という計算が行われています。  尚、 (A2=3) という部分は、 A2セルの値が3である場合には、数値の1と同様に扱われ、 A2セルの値が3ではない場合には、数値の0と同様に扱われます。 SUMPRODUCT(ROW($A$1:$A1)*($A$1:$A1<>"")*(COUNTIF(OFFSET($A$1,,,ROW($A$1:$A1)),"><")=COUNTIF($A$1:$A1,"><"))) という数式は、それを更に応用したものです。  例えば、D1セルをコピーして、D4セルに貼り付けると、その部分は SUMPRODUCT(ROW($A$1:$A4)*($A$1:$A4>"")*(COUNTIF(OFFSET($A$1,,,ROW($A$1:$A4)),"><")=COUNTIF($A$1:$A4,"><"))) という様に変換されますが、これは ROW($A1)*($A1<>"")*(COUNTIF(OFFSET($A$1,,,ROW($A1)),"><")=COUNTIF($A$1:$A1,"><")) + ROW($A2)*($A2<>"")*(COUNTIF(OFFSET($A$1,,,ROW($A2)),"><")=COUNTIF($A$1:$A2,"><")) + ROW($A3)*($A3<>"")*(COUNTIF(OFFSET($A$1,,,ROW($A3)),"><")=COUNTIF($A$1:$A3,"><")) + ROW($A4)*($A4<>"")*(COUNTIF(OFFSET($A$1,,,ROW($A4)),"><")=COUNTIF($A$1:$A4,"><")) と同じ意味になりますから、 =1*("A社"<>"")*(1=2) + 2*(""<>"")*(1=2) + 3*("B社"<>"")*(2=2) + 4*(""<>"")*(2=2) =1*1*0+2*0*0+3*1*1+4*0*1 =3 という計算が行われます。  文章で説明しますと、 A1~A4のセル範囲で、 A列のセルが空欄ではなく、 且つ A1セルからそのセルまでの範囲にある、空欄ではないセルの個数が、A1~A4の範囲にある空欄ではないセルの個数と等しい という条件を満たすセルが存在する行の行番号を合計する という数式です。  この条件を満たすのは、A1からそのセルまでの範囲にある、空欄ではないセルの個数が、2となる最初の行である3行目のみであるため、計算結果は3行目の行番号である3になります。 ROW() の値は、その数式が入力されている行の行番号になりますから、 INDIRECT("C"&SUMPRODUCT(ROW($A$1:$A4)*($A$1:$A4<>"")*(COUNTIF(OFFSET($A$1,,,ROW($A$1:$A4)),"><")=COUNTIF($A$1:$A4,"><")))&":C"&ROW()) =INDIRECT("C"&3&":C"&4) =INDIRECT("C3:C4") =$C3:$C4 という事になります。

ami0607
質問者

補足

どうもありがとうございます。 申し訳ありません。ここでつまづいてしまいました。 =1*("A社"<>"")*(1=2) + 2*(""<>"")*(1=2) +................. のところです。 (1=2)とあるのですが、(このあとも1=2)(2=2) と続きますが、この前者の数字(=より前の数字)がどうやって出てきたのかがわかりません。申し訳ありません。 もう少し考えてみますが、もしこちらの質問に気づかれましたら教えてください。

関連するQ&A

  • エクセル2003 計算されないようにしたい

    例 A列     B列  1     =A1+A2  2     =A2+A3  3     =A3+A4 (A4は空白です) となっている場合に B1=3 B2=5 B3=3 になると思うんですが この時に空白のセルと計算結果を出すときは0もしくは 計算されないようにしたいです。 最終的にB列にSUM関数を使って合計を出したいのですが A列に求めたい数字が片方しか入ってない場合 (数字が入っているセル+空白セル)はSUM関数の合計に入れたくないです。 なので上記の例では B列にSUM関数をした場合11ではなく8にしたいです。 それには文字列を入力して#VALUE!にするしかないですか? でもその状態にしてSUM関数で合計を出したときも#VALUE!になってしまいます。 よろしくお願いします。

  • Excel2003でif関数を使うとSUM関数で反映されません

    A1セルに金額を入力すると、B1に1と表示させる為に=IF(A1,"1","")といった数式を入れております。 さらにC1にBセルの合計値を表示させる為に=SUM(B1)C2には=SUM(B1:B2)と入力しているのですが、B列のセルにIF関数を使った数字『1』が表示されてもC列セルに反映されないので困っています。 ここで質問ですが、A列セルに金額が入力されるとB列セルに数字『1』が表示され、更にC列セルにB列セルの合計値が表示される様な関数等はありますでしょうか?解り難い説明ですいません。 因みにA、B、C列共に1~31までのセルがあります。

  • エクセルの計算で・・・

    A列に50個ほどの商品の個数 B列にその単価  があります。 A列×B列の全体の答えの合計をC1に入れたいのです。 普通は、A1×B1をC1に入れてC51にSUM するのが簡単なんですが、依頼者の都合上できないのです。 関数1つでC1に合計が入りませんかね~。 この説明で意味お分かりでしょうか? もしお分かりの方がいらっしゃいましたら お助けください。

  • エクセル イレギュラーなSUM関数

    会社で使うエクセル表を作っていますが困っています。 A列B列があり A5にはA1~A4の合計のSUM関数が入っています。 B5にもSUM関数を入れたいのですが B1~B4はイレギュラーな事があった場合のみ数字を入力し B5にはB1~B4に入力された数字の合計と B列に何も入力されていない隣のA列の合計を表示させたいのです。 例えるなら A1~A4に3を入力 A5はSUM関数がはいっているので12が表示されているとして B列はB1~B3は未入力 B4に7が入力された場合 B5にはA1~A3とB4の合計の16が表示されるようにしたいのです。 B4に7を入力したので隣のA4の3は合計しないという事です。 どうぞ宜しくお願い致します。

  • SUM関数の範囲に#N/Aがあっても合計してくれる計算式

    A列に氏名、B列に金額(計算式が入っている)があります。 B列の最終行に合計金額を出したいのですが、 B列に、#N/Aとなるセルがあり、 SUM関数を使うと結果がエラーになります。 なんとかエラー値のセルは無視して合計金額を出す計算式は ないでしょうか。 よろしく御指導下さい。

  • excelの計算式のコピーが出来なくなった。

    Excelで表を作成して、A列の下部にSUMで合計を出して、選択をして 右にドラッグして、B,C,D,E,の合計を出していたのですが、 突然、計算式のコピーが出来なくなり、A列の合計が そのまま B,C,D,Eにコピーされるのです。  B列に移動したときはB列のSUMとなっているのですが、確定しますとAの値になります。 理解できなくて?  助けてください。

  • こんな関数お願いします

    こんな関数お願いします ドングリを拾った数の合計 Excel2003です、A列 月日 B列 氏名 C列 数量 行は2~60 氏名はA君B君C君D君です、 シート2のA列に氏名 B列に合計数量です。 B列の合計数量セルの関数式をお願いします、 シート1に記入するとシート2のB列に合計数量が出る方法A君でお願いします。

  • エクセル(excel)の計算式(関数)について

    エクセル(excel)の計算式(関数)でよいアイディアがありましたら教えてください。 1行目は項目行です。 セルA1から右に15列=セルO1まで、 a | b | c | d | e | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 と入っています。 2行目からデータとして、 セルA2から右に5列=セルE2まで、 4 | 2 | 2 | 1 | 1 と入力したとします。(データ例(1)) あるいは、 セルA3から右にセルE3まで、 6 | 3 | 0 | 0 | 0 と入力したとします。(データ例(2)) 1つのデータの5個の数字のルールは2つで、 「合計で10以下である。」 「左から順に小さくなるか、同じ数字となる。」 です。 (目的は、) このとき、F列からO列にかけて、 データ例(1)のケースでは、 a | a | a | a | b | b | c | c | d | e データ例(2)のケースでは、 a | a | a | a | a | a | b | b | b | と表示されるように、 つまり、項目行の下にある数だけ、その列の1行目の記号を 1(F列)から右に向かって順に埋めていくような、 F列からO列までの2行目以下に入れる適当な計算式(関数)は ないでしょうか。 拙い説明で申し訳ありません。どなたかよい考えをお持ちの方がいらっしゃいましたらと存じます。 どうぞよろしくお願い致します。

  • 続 エクセル イレギュラーなSUM関数

    先程こちらでhttp://oshiete1.goo.ne.jp/qa5428194.html イレギュラーなSUM関数を質問しお答えいただきましたが 新たに問題が出ましたのでもう一度質問いたします *さきほどの質問の内容はこちらです* A列B列があり A5にはA1~A4の合計のSUM関数が入っています。 B5にもSUM関数を入れたいのですが B1~B4はイレギュラーな事があった場合のみ数字を入力し B5にはB1~B4に入力された数字の合計と B列に何も入力されていない隣のA列の合計を表示させたいのです。 例えるなら A1~A4に3を入力 A5はSUM関数がはいっているので12が表示されているとして B列はB1~B3は未入力 B4に7が入力された場合 B5にはA1~A3とB4の合計の16が表示されるようにしたいのです。 B4に7を入力したので隣のA4の3は合計しないという事です。 *回答はこちらです* 回答1 配列関数で =SUM(IF(B1:B4="",A1:A4,B1:B4)) と入力して、Ctrl+Shift+Enterで決定したら、式が{}でくくられて配列関数になります。 式の意味は B1~B4が空白の場合は、A1~A4の値を、それ以外はB1~B4の値を出して合計 回答2 =SUMPRODUCT(NOT(B1:B4)*A1:A4+B1:B4) あたりですかね。not関数のかわりにisblank関数の方が判りやすい かもしれないけど。 TRUE/FALSEの論理値は、四則演算にぶち込むと1/0の数値として扱 われます。また、空は四則演算にぶち込むと0の数値として扱われ ます。だから、「B列が空である」がFALSEならA列とのかけ算はゼ ロになりB列の値が加算され、TRUEならA列の値に1をかけて0を足し たことになります。後はそれを1行目から4行目にわたって配列とし て計算して合計してくれるsumproduct関数に放り込むだけ。 問題はこの方法だと B列に何も入力しない場合、A列の合計がB5に出て来てしまいます。 B列に何も入力しない場合、B5にも何も入力しないようにしたいのです。 ちなみに先程は記述しませんでしたが B列には自動で数字に〔〕が付くようにユーザー定義で指示していて B5はB列が未入力で合計が0でも〔0〕と表示されないように ユーザー定義で "〔"#"〕";;;が入っていてます。 やりたい事をまとめると ●B列には自動で数字に〔〕を付ける ●B1~B4に数字が入力された場合はB5に  B1~B4の合計とB列に何も入力されていない隣のA列の合計を表示させたい  がB列が未入力ならB5に何も表示しない ややこしくて申し訳ありません。 そして確認不足で申し訳ありませんでした。 どうぞ宜しくお願い致します。

  • 条件付のsum,max,min関数の書き方

    sum関数なので、合計欄のセルに ex.=SUM(B1:B6)などと書くときに、 a列が"1"の場合のみ合計欄のセルに加算したい場合は どうやって書けばいいでしょうか? __ A B 1 1 100 2 0 200 3 1 300 4 0 400 5 1 500 6 0 600 合計欄の値=900にしたいのですが.... もしも書き方があるのであれば、 MAX,MINの場合も同じでしょうか?