- 締切済み
小難しいかもしれない関数
A B C 1行 あ い 300 2行 あ 100 3行 い 50 という表があったとして SUMIF関数の要領で 「あ」と「い」が混在する場合には それぞれに半分ずつ(この場合は各150) 「あ」のみの場合はそのまま 「い」のみの場合もそのまま →この場合の計算結果は 「あ」250 「い」200 というような関数を作りたいです。 ちなみに、行は100行ほどあります。 どなたか教えていただけないでしょうか。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- SAKURAMYLOVE
- ベストアンサー率30% (162/533)
#3さんの回答に対して、koba_ponponさんの補足要求の説明がありませんでしたので、私の勉強のつもりで回答いたします。 一般に下記のような金額の合計を出す場合は、単価×数量で金額を出してそれをSUM関数などで合計します。 品目 単価 数量 金額 A 10 2 20 B 20 3 60 合計 80 それを金額を計算しないで一発で合計:Σ(単価×数量)を出すのが、SUMPRODUCT関数です。 似たような関数にSUMSQ、SUMX2MY2、SUMXMY2などがありますので、興味があればHELPなどで確認ください。 #2さんの回答は、これをうまく利用したのです。 式が煩雑なので以下のように考えてください。 「あ」=SUMPRODUCT(C1*((A1="あ")*(B1="い")*1/2+(B1<>"い")) すなわち、SUMPRODUCT関数は、これを1から3行まで計算して合計します(配列数式の考え方)。 順番に説明しますと、 A1="あ"ならTUREで1を返し、 "あ"でなければFALSEで0を返します。 B1="い"ならTUREで1を返し、 "い"でなければFALSEで0を返します。 (A1="あ")*(B1="い")の「*」はANDの意味なので、"あ"と"い"の条件がそろった場合のみ1を返します。 結果は以下のとおりです。 A B 結果 あ 0 い 0 あ い 1 よって1行目の(C1*(A1="あ")*(B1="い")*1/2は、 300*1*1*1/2=150 となります。 次の +(B1<>"い"の「+」は、ORの意味でC1*(A1="あ")*(B1="い")*1/2の条件もしくは、B1<>"い"の条件なら、ということです。 B1<>"い"は、B1="い"でなければ、TUREで1を返し、"い"であれば、FALSEであり0を返します。 A B 結果 あ 1 い 0 あ い 0 よって1行目は、300*0=0 したがって1行目の結果は、 300*1*1*1/2+300*0 =150+0 =150 同様に2行目、3行目もおなじ計算を行い、最後に合計されます。 「あ」は、 1行目 300*1*1*1/2 + 300*0=150 2行目 100*1*0*1/2 + 100*1=100 3行目 50*0*1*1/2 + 50*0=0 よって、「あ」は、150+100+0=250となります。 「い」も同様な考え方です。
- imogasi
- ベストアンサー率27% (4737/17069)
答えも出てしまって後から聞くもの、間が抜けているが 小生あたまが悪いらしい・ A B C D 1行 あ い 300 2行 あ 100 3行 い 50 とD列に付いて D1は「あ」の分300÷2=150 「い」の分300÷2=150、で合わせて300。 D2は「あ」の分100に300÷2=150(?)の 150を足して250。 D3は「い」の分50に300÷2=150(?なぜこれを持ってくるのか)の 150を足して200。 と言うことでしょうか。 「あ」「い」混在と、単独でルールが統一取れないように思いますが。 ビジネスニーズが背景にあるのでしょうが、どう言うケースでしょう。
- mshr1962
- ベストアンサー率39% (7417/18945)
上記以外の追加設定がないなら 「あ」=SUMPRODUCT(($C$1:$C$3)*($A$1:$A$3="あ")*(($B$1:$B$3="い")*1/2+($B$1:$B$3<>"い"))) 「い」=SUMPRODUCT(($C$1:$C$3)*(($A$1:$A$3="あ")*1/2+($A$1:$A$3<>"あ"))*($B$1:$B$3="い"))) SUMIFにこだわるならD列で=A1&B1として下方にコピーしておいて 「あ」=SUMIF($D$1:$D$3,"あ",$C$1:$C$3)+SUMIF($D$1:$D$3,"あい",$C$1:$C$3)/2 「い」=SUMIF($D$1:$D$3,"い",$C$1:$C$3)+SUMIF($D$1:$D$3,"あい",$C$1:$C$3)/2
補足
回答、ありがとうございました! SUMPRODUCT関数でやってみたいのですが、 良ければ書いていただいた式の解説をお願いできないでしょうか。 この関数は A列*B列の合計の関数でしたよね?
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 前提条件として、A列は必ず「あ」、B列は必ず「い」が入るとします。 「あ」の合計は、 =SUMPRODUCT((A1:A10="あ")/((B1:B10="い")+1),C1:C10) で、「い」の合計は、 =SUMPRODUCT((B1:B10="い")/((A1:A10="あ")+1),C1:C10) です。 どちらに「あ」「い」が入るか決まっていない場合は、補足して下さい。 その場合は、AB列ともに同じ文字が入る可能性があるのか、その場合も1/2なのか、も補足して下さい。
- ledm
- ベストアンサー率21% (19/89)
1行目の“あ”の座標をA1とした場合に、D1セルに =IF(AND(A2="あ",B2="い"),C2/2,C2) でいけるかと思います。 IF関数での判定ですが、その条件文にAND関数を入れ、『“あ”と“い”』が共に入っている時に数値を半分にします。 尚、AとBのどちらに“あ”と“い”が入るかわからない場合には、 =IF(AND(OR(A2="あ",A2="い"),OR(B2="あ",B2="い")),C2/2,C2) で対応できます。 但し、A・B両方に“あ”“い”それぞれが入っていても半分にしちゃいますが・・・。
補足
経費負担部署の問題なのです。 「あ」という部署のためだけに動いた→ 「あ」100%負担 「い」 〃 → 「い」100%負担 「あ」「い」の部署のために掛け持ちで動いた→ それぞれ半額負担 …それを月で合計する という計算なのです。