2012-04-12 12 views
11

Sto cercando di fare in modo che Excel mi trasformi in array ordinando due array. Come esempio, lascia due array A1: A3 essere 7, 8, -3 e B1: B3 tramite 4, -8, -8Come applicare un OR logico a un array in Excel

Questo dovrebbe essere abbastanza semplice, ma sembra che

OR (A1:A3 > 0 ; B1:B3 > 0) 

rendimenti TRUE invece dell'array che mi aspetto (TRUE, TRUE, FALSE).

Naturalmente avrei potuto usare un trucco sporco come

(((A1:A3 > 0)*1 + (B1:B3 > 0)*1) >= 1) *1 

ma chi vorrebbe sostenere che?

Inoltre, c'è probabilmente qualcosa da cercare intorno a "CSE (Ctrl-Shift-Invio) Formule" (http://www.mrexcel.com/articles/CSE-array-formulas-excel.php) ma in realtà sembra magia nera.

Mi sono perso qualcosa di facile?

Per chi è curioso, la formula che sto cercando di costruire è un po 'più complessa, naturalmente. Sta cercando di contare (tramite SUMPRODUCT) tutte le righe dove "(stato == A stato OR == B) AND Data = qualche cella". L'OR che sto cercando è solo una matrice del mio sumproduct e non è definita nelle celle (sarebbe troppo facile)

risposta

13

In genere non è possibile utilizzare OR o AND in "formule di array" perché, come si ha scoperto qui, restituiscono solo un singolo risultato (AND è TRUE solo se tutte le condizioni sono TRUE, o TRUE è TRUE, come ci si aspetterebbe, quindi nel tuo esempio otterrai VERO purché almeno uno dei 6 valori è positivo).

userei qualcosa di simile al vostro suggerimento, utilizzando + in sostituzione o in modo efficace, anche se non è necessario il primi due * 1 + perché i co-erces, quindi questo sarebbe sufficiente

=((A1:A3 > 0) + (B1:B3 > 0) >0) *1

anche se si dispone di una singola colonna che può essere una cosa o un'altra, allora che è escludono a vicenda, di sicuro, quindi forse ha solo bisogno

=(A1:A3="A")+(A1:A3="B")

+0

+1 coperto Barry – brettdj

+0

Grazie per la spiegazione. Ancora sperando in una formula "più pulita" però. – PPC

+0

Probabilmente dipende dalla tua definizione di "pulitore" .... ma sospetto che non ci sia un modo più elegante ..... forse usare le funzioni IF è più trasparente, ad es. '= IF (A1: A3> 0,1, IF (B1: B3> 0,1,0), 0)' ...... ma dovresti inserire "array", anche all'interno di SUMPRODUCT –

3

un ambiente pulito e relativel modo semplice y aggirare questo è quello di utilizzare nidificate IF:

IF(A1:A3 > 0, TRUE, IF(B1:B3 > 0, TRUE, FALSE)) 

Questo restituisce TRUE se il numero di A è maggiore di 0, allora, se non, restituisce TRUE se il numero di B è maggiore di 0, ma altrimenti restituisce FALSE.

In pratica si sta semplicemente scrivendo la propria funzione OR. Potresti fare lo stesso con AND. Finché hai condizionali e non, puoi farne fuori tutto il resto.

2

Ho eseguito una formula di array per la mediana di determinati dati all'interno di una tabella. Ad esempio, all'interno dei dati c'erano i gruppi X, Y e Z. Volevo ottenere la mediana per due tipi di dati, X e Y, quindi non potevo usare l'istruzione OR all'interno dell'array.

Quello che ho fatto è stato creare una nuova colonna nel set di dati originale.Era IF colonna A = X o A = Y, visualizza "1", IF Non visualizza "0"

Ho quindi scritto la formula Array basata sulla nuova colonna, poiché tutti i gruppi di dati sono stati riclassificati in questa colonna come 1 o 0, non avevo più bisogno dell'istruzione OR all'interno dell'array.

Questo ha funzionato per me e posso facilmente copiare e incollare nuovi dati nella tabella originale senza rovinare questa nuova istruzione IF, quindi è facile da aggiornare.

Problemi correlati