- ベストアンサー
EXCEL関数で複数のセルの合計が正しいかどうか判定する
MS EXCEL2003を使用しています。 お客様の利用状況をEXCEL2003にて管理しており、そのデータ入力が正しいものかどうかを判定する関数を教えていただきたいです。 1.列ABCに利用コース別の人数が入る 2.列DEFGに利用時間帯別の人数が入る 3.列HIに性別別の人数が入る 4.列JKLMNに来店手段別の人数が入る 目的 列Pに、お客様総数をカウントしたい。 1~4それぞれで合計人数が出るが、それらがすべて正しいときには列Pに「合計数値」を、1~4のなかで1つでも合計数値に間違いがあったときには列Pも「error」と表示させたい。 よろしくおねがいします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
列Pに入れる式の一つの案を紹介します セルP1の例 =if(and(sum(a1:c1)=sum(d1:g1),sum(a1:c1)=sum(h1:i1),sum(a1:c1)=sum(j1:n1)),sum(a1:c1),"error") もう少しすっきりした関数もあるかもしれません・・・。
その他の回答 (4)
- KURUMITO
- ベストアンサー率42% (1835/4283)
例えばP1セルには次の式を入力してはいかがでしょう。 =IF(SUM(A1:N1)=0,"",IF(AND(SUM(A1:C1)=SUM(A1:N1)/4,SUM(D1:G1)=SUM(A1:N1)/4,SUM(H1:I1)=SUM(A1:N1)/4,SUM(J1:N1)=SUM(A1:N1)/4),SUM(A1:N1)/4,"error"))
お礼
回答ありがとうございます。 内容は、すべてのセルの合計値を4で割ったものが、「1.2.3.4」それぞれの部門の値と等しいかどうかを判定しているのですね。違った考え方として参考にさせていただきます。
- dogsiva
- ベストアンサー率32% (92/279)
たびたび申し訳ありません。dogsivaです。 No.3の回答に間違いがありましたので訂正です。 最後に紹介した式では sum(a1:c1)=sum(d1:g1) sum(h1:i1)=sum(j1:n1) この2つの比較しかしないため たとえば sum(a1:c1)=10 sum(d1:g1)=10 sum(h1:i1)=100 sum(j1:n1)=100 でもTRUEを返してしまうようになっていました。 この式では間違った結果を得てしまいますのでご注意ください。
お礼
確かにそうですね。 =if(and(sum(a1:c1)=sum(d1:g1),sum(a1:c1)=sum(h1:i1),sum(a1:c1)=sum(j1:n1)),sum(a1:c1),"error") が無難なようですね。
- dogsiva
- ベストアンサー率32% (92/279)
回答No.1のdogsivaです。再度回答します。 northstarxさんの =if((sum(a1:c1)=sum(d1:g1)=sum(h1:i1)=sum(j1:n1)),sum(a1:c1),"error") これと 私の先述した =if(and(sum(a1:c1)=sum(d1:g1),sum(a1:c1)=sum(h1:i1),sum(a1:c1)=sum(j1:n1)),sum(a1:c1),"error") これは、得られる結果が異なります。 例としてsum(a1:c1)、sum(d1:g1)、sum(h1:i1)、sum(j1:n1)がすべて10となる場合、 上の式では sum(a1:c1)=sum(d1:g1)→10=10→TRUE sum(h1:i1)→10 ↓ TRUE=10→FALSE (論理値TRUEと数値を比べてしまうので、FALSEとなってしまう) 論理式と数値が混ざってしまうのでうまくいきません。 下の式では、2辺の式を3つ作っているので問題ありません。 sum(a1:c1)=sum(d1:g1)→10=10→TRUE sum(a1:c1)=sum(h1:i1)→10=10→TRUE sum(a1:c1)=sum(j1:n1)→10=10→TRUE ↓ and(TRUE,TRUE,TRUE)→TRUE このようになるのでうまくいきます。 ただし、これでうまくいくのは、これら4つの合計値が「等しい」場合であって 「正しい」場合とは無関係というのはmike_gさんのご指摘のとおりです。 ちなみに、上の式を使ってうまくいくようにするための一案 =if((sum(a1:c1)=sum(d1:g1)=sum(h1:i1)=sum(j1:n1)),sum(a1:c1),"error") ↓ =if((sum(a1:c1)=sum(d1:g1))=(sum(h1:i1)=sum(j1:n1)),sum(a1:c1),"error") (a=b=c=dから(a=b)=(c=d)に変更) こうすることで sum(a1:c1)=sum(d1:g1)→10=10→TRUE sum(h1:i1)=sum(j1:n1)→10=10→TRUE TRUE=TRUE→TRUE こうなり、うまくいくと思います。
お礼
詳しい解説ありがとうございます。 「論理式と数値」昔学んだような気がします、ちょっと思い出してきました。2つくらいなら簡単にできたのですが、4つとなるどうしていいか困ったもので。
》 1~4それぞれで合計人数が出るが、それらがすべて正しいとき… 「1~4それぞれで合計人数が出るが、それらがすべて」等しいときが「正しい」とは限りません。別の(正しいと判断する総人数の)データが必要です。 「1~4それぞれで」入力ミスがあっても、それぞれの合計人数が等しい場合もあり得るからです。
お礼
ご指摘ありがとうございました。
補足
確かにのとおりです。正確な合計人数のデータが必要でした。 ただ、今回は4つのデータが正しければ、「正しい」と判断してとある一つのデータ(例えば1.の列ABCの合計)を出力したいと思っています。
お礼
ありがとうございます。 これに近いもの=if((sum(a1:c1)=sum(d1:g1)=sum(h1:i1)=sum(j1:n1)),sum(a1:c1),"error")くらいまでは思いついたのですが、うまく機能しなかったので。 もう少しスッキリしたものがわかれば教えてください。