2013-03-06 17 views
11

Un problema ricorrente di Excel che ho sono formule come INDEX(array,row,column) che restituiscono 0 quando non c'è risultato, piuttosto che restituire vuoto.Hanno formule di Excel che restituiscono 0, rendono il risultato vuoto

Qual è il modo migliore per modificare il risultato dello zero in bianco?

Ecco approcci che ho provato finora:

1) Uso di divisione per zero. Se INDICE restituisce 0, causo un errore che filtro quindi.

=IFERROR(1/1/INDEX(A,B,C),"") 

CONS: Rende la formula più caotica e nasconde gli errori che potresti voler vedere.

2) Utilizzo di formattazione personalizzata

0;-0;;@ 

CONTRO:
1) non può contemporaneamente applicare il formato della data
2) non funziona con la formattazione condizionale quando si tratta di controllare per celle vuote (v'è ancora il valore zero, è solo non mostrato)

3) Uso IF dichiarazioni

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"") 

CONS: ripetizione disordinata

Qualcuno ha altre/migliori idee?

+1

Nessun motivo non è possibile escludere zero con formato data - formato personalizzato come questo ad esempio - m/g/aa ;; –

+1

Tristan, solo per interesse, che tipo di dettagli extra stai cercando (in base al tuo commento quando imposti il ​​bounty)? La mia risposta (e alcune delle altre) sembrano fornire abbastanza dettagli, per quanto posso vedere, che permettano di risolvere il problema. Ho persino aggiunto passaggi dettagliati su come creare la macro e usarla, nel caso in cui fosse ciò che causava il tuo dolore. Se pensi che le risposte siano carenti in qualche modo, dicci _why_ e possiamo correggerle. – paxdiablo

risposta

9

È possibile creare i proprie funzioni definite dall'utente in un modulo all'interno di Excel come (a memoria, in modo da avere bisogno di un po 'di debug, e la sintassi può variare tra le versioni di Excel pure):

Public Function ZeroToBlank (x As Integer) As String 
    If x = 0 then 
     ZeroToBlank = "" 
    Else 
     ZeroToBlank = CStr(x) 
    End If 
End Function 

È quindi sufficiente inserire =ZeroToBlank (Index (a,b,c)) nella cella.

C'è un bel tutorial su questo argomento here.

I passaggi fondamentali sono:

  • Aprire l'editor VB all'interno di Excel utilizzando Tools -> Macro -> Visual Basic Editor.
  • Creare un nuovo modulo con Insert -> Module.
  • Inserire la funzione sopra in quel modulo.
  • Nelle celle in cui si desidera chiamare tale funzione, immettere la formula
              =ZeroToBlank (<<whatever>>)
    dove <<whatever>> è il valore che si desidera utilizzare in bianco per se è pari a zero.
  • Si noti che questa funzione restituisce una stringa, quindi se si desidera che appaia come un numero , si consiglia di giustificare a destra le celle.

Si noti che potrebbero esserci variazioni minori a seconda della versione di Excel in uso. La mia versione di Excel è il 2002, che certamente è piuttosto vecchia, ma fa ancora tutto ciò di cui ho bisogno.

+1

Come si impedisce ai valori che sono effettivamente "0" di non diventare vuoti? –

+0

@ Gerhard, semplicemente usi il valore all'interno della funzione piuttosto che la funzione, si presume che tu sappia quale comportamento vuoi. Se il comportamento dipende da fattori _other_, puoi usare '@ if' o qualche altro controllo condizionale. – paxdiablo

6

Il modo più normale sarebbe l'istruzione IF, anche se più semplice di quanto il tuo esempio:

=IF(INDEX(a,b,c),INDEX(a,b,c),"") 

Non c'è bisogno di fare giravolte con la formula, poiché lo zero valori innescano la condizione falsa.

+0

Non restituire '" "' per le celle che contengono effettivamente '0'? – NetMage

2

Se sei disposto a far sparire tutti gli zeri nel foglio di lavoro, vai in "Opzioni di Excel", nella pagina "Avanzate", nella sezione "Visualizza opzioni per questo foglio di lavoro" e deseleziona "Mostra zero nelle celle che avere un valore zero "casella di controllo. (Questa è la navigazione per Excel 2007;. YMMV)

Per quanto riguarda la risposta (2), si può risparmiare un paio di tasti digitando 0;-0; - per quanto posso dire, che è equivalente a 0;-0;;@. Al contrario, se vuoi essere un po 'più generale, puoi utilizzare il formato General;-General;. No, questo non gestisce automaticamente le date, ma, come fa notare Barry, se si è in attesa di un valore di data, è possibile utilizzare un formato come d-mmm-yyyy;;.

1

La domanda potrebbe essere: perché vorresti che agisse diversamente da come lo fa ora? Oltre a scrivere la propria funzione di inviluppo o una funzione alternativa in VBA (che probabilmente causerà la riduzione della velocità di calcolo in file di grandi dimensioni) potrebbe non esserci un'unica soluzione ai vari problemi.

Qualsiasi formula di follow-up molto probabilmente fallirebbe su uno spazio vuoto causerebbe un errore da catturare con IFERROR() o impedire da IF(sourcecell<>"";...), se si usasse quest'ultimo, quindi il test per uno zero è solo la stessa quantità di lavoro e confusione . Il controllo delle celle vuote diventa il controllo di 0 celle valutate. (Se questo lavoro non funziona per favore, spiega più specifico qual è il problema).

Per motivi estetici, la soluzione di formattazione personalizzata sarebbe perfetta.

Per i grafici potrebbe esserci un problema, che sarebbe risolto applicandolo nella formula originale.

4

io non sono sicuro che funziona con tutti i tipi di dati, ma l'unica soluzione che ho trovato per il momento è quello di testare se l'indice torna vuoto:

=IF(ISBLANK(INDEX(a,b,c)),"",INDEX(a,b,c)) 

La formula

=IF(INDEX(a,b,c),INDEX(a,b,c),"") 

non lo fa funziona con il testo

4

Forse il modo più semplice è aggiungere la formula di formattazione del testo alla formula, con un modificatore ?. Così:

(formula to grab values) diventa:

text((formula to grab values),"?")

Speranza che aiuta.

1

C'è una risposta molto semplice a questo problema disordinato: la funzione SOSTITUZIONE.Nel tuo esempio sopra:

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"") 

può essere riscritta come segue:

=SUBSTITUTE((1/1/INDEX(A,B,C), " ", "") 
1

ho capito, concatenando una stringa EMPTY.

INDEX(tt_Attributes,MATCH([RowID],tt_Attributes[RowID],0),COLUMN(tt_Attributes[Long Description])) & "" 
1
=if(b2 = "", "", b2) 

questo ha lavorato per me

0

Utilizzare la formattazione condizionale (scheda Home sezione stili) e applicare le cellule evidenziare regola (mettendo 0 Formato celle che sono uguali a box), ma selezionare formato personalizzato quindi la scheda Numero. Seleziona la categoria costume e nella casella Tipo di mettere:

0; -0 ;; @

Sembra complicato, ma in realtà è semplice.

Questo dà il vantaggio che la cella sembra vuota ma 0 è ancora il valore sottostante, quindi tutte le formule utilizzate contro quella cella/selezione lo vedranno ancora come numerico e verranno salvate con un sacco di problemi con le istruzioni IF concatenate.

0

Nessuno dei precedenti ha funzionato per me oggi, quindi ho provato a inserire lo 0 tra virgolette, come mostrato nell'esempio seguente.

Esempio: = IF (INDEX (a, b, c) = "0", "", INDEX (a, b, c))

-1

=IF(INDEX(a,b,c)="0","", INDEX(a,b,c)) lavorato per me con una lieve modifica. Escluso lo 0 e nessuno spazio tra le quotazioni: =IF(INDEX(a,b,c)="","", INDEX(a,b,c))

Problemi correlati