Uso della condizione OR in SUMPRODUCT


1

Ho tre colonne di dati: una colonna di somma ( A) e quindi le due colonne che formano la somma ( Be C). A volte, viene compilata solo una delle colonne Be C; occasionalmente le colonne Be Csono entrambe vuote.

Voglio sommare la colonna A(cioè un totale dei totali), solo quando ci sono dati in colonne Be / o C. Quindi, speravo che avrebbe funzionato quanto segue:

=SUMPRODUCT(--((B2:B10<>"")+(C2:C20<>"")),A2:A10)

Ma il problema è che se ci sono dati in ENTRAMBE le colonne B e C, l'array formato da (B2:B10<>"")+(C2:C10<>"")verrà sommato in 2 e il precedente --non lo convertirà in TRUE(es. {1,1,0,1,0,1,1,1,0} + {1,0,1,1,0,1,1,0,1} = {2,1,1,2,0,2,2,1,1}) E tale array finale verrà quindi moltiplicato per i valori nella colonna A, raddoppiando così i valori 1, 4, 6 e 7.

Sembra un comportamento strano! Come faccio a farlo funzionare correttamente ?!


Quindi, mi permetta di ottenere questo diritto: Aè la somma di Be C, e si desidera sommare i valori in Acui Bo (compreso) Cnon è vuoto. Qual è il valore di Aquando Be Csono entrambi vuoti? Non è 0? Se questo è vero, non dovresti avere bisogno di alcuna condizione per sommare i valori A.
Eccellente il

Purtroppo no, si tratta di dati disordinati che sono stati completati attraverso un sondaggio online. Le colonne B e C sono divise femmina / maschio. Quindi potrebbero sapere che sono state contate 10 persone, ma non conoscere la divisione di genere. Ma se sommo la colonna A e poi comincio a fare somme con quel totale, distorcerebbe le cose.
Mat,

Risposte:


1

Potresti fare qualcosa del genere:

=SUMPRODUCT($A$2:$A$11*($B$2:$B$11&$C$2:$C$11<>""))

L'idea è che la concatenazione di Bed Cè vuota solo se entrambi sono vuoti.


1

Aha - Avevo bisogno della SIGNfunzione:

=SUMPRODUCT(A2:A10,SIGN((B2:B10<>"")+(C2:C10<>"")))

Trovo ancora strano che, per quanto riguarda SUMPRODUCT, TRUE + TRUE = 2. E che 2 non valuti solo su TRUE quando --è in gioco.


Il --è utilizzato per convertire il valore booleano per un valore numerico. Pensalo come TRUE*(-1)*(-1). La ragione di ciò è che SUMPRODUCTfunziona solo su array numerici .
Eccellente il

Guarda l'affermazione così come è stata scritta --((B2:B10<>"")+(C2:C10<>"")). Per me, questo dovrebbe convertirsi in booleano come ultimo passo; cioè, anche se vede un '2', dovrebbe semplicemente interpretarlo come TRUE. E TRUE*(-1)*(-1)solo uguale TRUE, non 2!
Mat,

0

Penso che potresti considerare =SUMIFS()invece la funzione.

La tua condizione può essere riscritta come:

  • Condizione 1: la colonna B è compilata e la colonna C è vuota; O
  • Condizione 2: la colonna B è vuota e la colonna C è compilata; O
  • Condizione 3: la colonna B e la colonna C sono entrambe compilate.

Poiché le 3 condizioni si escludono a vicenda, il complicato SUMPRODUCTè essenzialmente =SUMIF(Condition 1)+SUMIF(Condition 2)+SUMIF(Condition 3). Riscritto come SUMIFS:

=SUMIFS(A2:A10,B2:B10,"<>",C2:C10,"")+SUMIFS(A2:A10,B2:B10,"",C2:C10,"<>")+SUMIFS(A2:A10,B2:B10,"<>",C2:C10,"<>")

Per quanto riguarda le prestazioni, questa soluzione potrebbe essere migliore dell'uso SUMPRODUCTanche se è presente un numero elevato di righe da riepilogare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.