- ベストアンサー
Excel条件付きの和を求めたい
- Excel条件付きの和を求めるための式の立て方を教えてください。
- Excel2007を使用している場合、D列のシリアル番号とL列の回数を元に、AN列の個数の合計をBI列に求める方法を教えてください。
- 質問No7850523での回答に基づいて、Excel2007で条件付きの和を求める方法を教えてください。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
No.1 です。どうやら見ていると、条件付きというよりも、L 列が 1 になったら合計をキャンセルして、値を戻すという意味ですかね。で、合計の対象は、AN 列なんだと。そうであれば、次式。 BI2 =0+(l2=1) BJ2 =n(bj1)+bi2 BK2 =bi2*sumif(bj:bj,bj2,an:an) こういうのは始めから枝番号を振っておかないと、今後もいろいろ苦労しますよ。添付図を参照。値複写で数式を除去しておき、今後もレコードが増えたら、手入力などで番号を追加していくとよいでしょう。 他にも、できるだけ作業列を使うようにすると、簡単な数式のみで欲しい結果が得られます。 ゼロという値のみをセルの書式で非表示にすることもできます。具体的には、対象のセル範囲を選択した状態で、右クリックなどから「セルの書式設定>表示形式タブ>ユーザー定義>種類ボックス」に、「G/標準;-G/標準;」とか「[=0]"";G/標準」などを入力するだけ。
その他の回答 (9)
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.4・5 です。 No.4 では枝番号という言い方をしましたが、枝番号というか、要するに「一意な番号」を振る、ということです。BJ 列に番号を振った後であれば、仮に D 列の番号を削除したとしても、フィルタにおける複数列での絞込みなどによって、各レコード(行)が特定できる状態になっているのがお分かりかと思います。 >BJ2 =n(bj1)+bi2 のn(bj1)のnの意味を教えてください。 N 関数です。多分 number という意味だと思います。T 関数というのもあります。多分 text という意味だと思います。よかったらネットで検索してみてください。 N 関数は、数値はそのままの値に、文字列は「0」という数値にそれぞれ変換してくれる関数です。 No.4 の添付図では、BJ2 セルが BJ1 を参照し、それに BI2 の値を足しています。もしも「=bj1+bi2」という数式で計算しようとすると、BJ1 の文字列に数値を足すことになるため、「#VALUE!」というエラーとなります。これを回避するため、n をくっつけといただけです。 ですから代わりに、BJ2 に「1」という数値を、BJ3 以下に「=bj2+bi3」という数式を入力することにしても、全く問題ありません。 N 関数は、たまに便利なときがあります。例えば、表中のあるセルで、同じ表の別セルの数値を使って計算したいという場合、使おうとしているセルに文字列も入力したいというケースがあります。SUM 関数などでは文字列は無視してくれますが、一般の四則演算などでは、文字列が混ざるとエラーになってしまいます。そういうときに n をくっつけとけば、エラーになりません。 次の添付図は具体例です。「未定」の箇所をいつか数値で上書きすれば、直ちに計算結果に反映されるという仕組みです。なお「=N(B7*D7)」という数式にするとエラー回避できていないので、ご注意。
お礼
解説ありがとうございます。 ExcelにN関数というのが有るんですね。 初めて知りました。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
No.3です。ちょこっと違ったので修正 L列は1000以下ではなく、1000未満でした。 =IF(L2<>1,"", IF(ISNA(MATCH(1,L3:L1001,0)),SUM(AN2:AN1000), SUM(AN2:INDEX(AN2:AN1000,MATCH(1,L3:L1001,0))))) に修正。適宜範囲は変更してください 作業列 MATCHとして BJ2セル =MATCH(1,L3:L1001,0) 下へオートフィル BIセル =IF(L2<>1,"",IF(ISNA(BJ2),SUM(AN2:AN1000), SUM(AN2:INDEX(AN2:AN1000,BJ2)))) 下へオートフィル L列が 1以外なら空白"" 一番下の1だったら 数式の入っている行を含み、下へ999行分のの合計 一番下ではないなら、次の1の一つ上までの合計
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答:No.6、7です。 尚、L列の値が、D列において同じシリアル番号が上から数えて何回現れたのかを示す値だとしますと、BI1セルに入力される関数を次の様なものとしますと、L列の数値が無くとも、同じ働きをさせる事が出来ます。 =IF(AND($D1<>"",COUNTIF($D$1:$D1,$D1)=1),SUMIF($D:$D,$D1,$AN:$AN),"") 或いは =IF(AND(INDEX($D:$D,ROW())<>"",COUNTIF($D$1:INDEX($D:$D,ROW()),INDEX($D:$D,ROW()))=1),SUMIF($D:$D,INDEX($D:$D,ROW()),$AN:$AN),"")
- kagakusuki
- ベストアンサー率51% (2610/5101)
済みません、間違えました。 正しくは =IF($L1=1,SUMIF($D:$D,$D1,$AN:$AN),"") 或いは =IF(INDEX($L:$L,ROW())=1,SUMIF($D:$D,INDEX($D:$D,ROW()),$AN:$AN),"") です。
- kagakusuki
- ベストアンサー率51% (2610/5101)
BI1セルに次の関数を入力されてから、BI1セルをコピーして、BI2以下に貼り付けられると良いと思います。 =IF($AN1=1,SUMIF($D:$D,$D1,$L:$L),"")
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.4 です。何度もすみませんが、言い忘れたことを補足します。BI 列は、次式でも構いません。BI 列の結果が TRUE または FALSE で表示されるようになるだけで、他の列は正しく計算されます。 BI2 =l2=1
補足
すみません。 BJ2 =n(bj1)+bi2 のn(bj1)のnの意味を教えてください。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
- chonami
- ベストアンサー率43% (448/1036)
ピボットテーブルでいいのでは?
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
質問文の BI 列の値が答えなのですか?その計算の方法をお知らせください。
補足
はいそうです。 L列が1だけの時はANの数字のまま L列が1からnまであるときはANの数字の和 です。
お礼
ご回答ありがとうございます。 作業列を作ると誤りが少なくなり、 横スクロールも無くなり作業がはかどりますね。 アドバイスありがとうございます。
補足
作業列で整理する考え方を教えていただきありがとうございます。 計算式を教えてくださった皆さんにも感謝します。