Restituisce la cella vuota dalla formula in Excel


219

Devo restituire una cella vuota da una formula di Excel, ma sembra che Excel tratti una stringa vuota o un riferimento a una cella vuota in modo diverso rispetto a una vera cella vuota. Quindi essenzialmente ho bisogno di qualcosa del genere

=IF(some_condition,EMPTY(),some_value)

Ho provato a fare cose come

=IF(some_condition,"",some_value)

e

=IF(some_condition,,some_value)

e supponendo che B1 sia una cella vuota

=IF(some_condition,B1,some_value)

ma nessuna di queste sembra essere una vera cella vuota, immagino perché sono il risultato di una formula. Esiste un modo per popolare una cella se e solo se viene soddisfatta una condizione e in caso contrario mantenere la cella veramente vuota?

EDIT: come raccomandato, ho provato a restituire NA (), ma per i miei scopi questo non ha funzionato neanche. C'è un modo per farlo con VB?

EDIT: sto costruendo un foglio di lavoro che estrae i dati da altri fogli di lavoro che è formattato per le esigenze molto specifiche di un'applicazione che importa i dati in un database. Non ho accesso per modificare l'implementazione di questa applicazione e non riesce se il valore è "" anziché vuoto.


8
Puoi spiegare perché la cella deve essere vuota? A seconda del tipo di "vuoto", potrebbe esserci una soluzione alternativa.
JT Grimes,

3
La cella contiene la formula, vero? Come può essere vuoto o vuoto allora?
Sinan Ünür,

8
Ho un problema simile, sto disegnando un grafico e non voglio mostrare il valore 0 per gli elementi vuoti sul grafico. Se i record sono celle vuote, li omette dal grafico ma uno qualsiasi dei metodi elencati in "Risposte" di seguito comporta la visualizzazione di 0 sul grafico. :(
Cobusve,

5
Per evitare che gli zero vengano visualizzati sui grafici, utilizzare la funzione NA () invece della stringa vuota / zero. Questo metterà # N / A nella cella, che viene ignorato dalla routine grafica.
Rob,

5
Il suggerimento di Rob di usare # N / A ha un risultato diverso rispetto a una cella vuota. # N / A comporterà l'interpolazione della routine grafica sulla cella, mentre una cella veramente vuota verrà trattata come uno spazio nella linea. Se si desidera un gap nella riga anziché INTERPOLAZIONE attraverso il gap, è necessario che la cella sia VUOTA e non # N / A come da domanda. Di seguito ci sono soluzioni che affrontano questo come richiesto.
Mr Purple,

Risposte:


50

Dovrai usare VBA, quindi. Esaminerai le celle nel tuo intervallo, testerai la condizione ed eliminerai i contenuti se corrispondono.

Qualcosa di simile a:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next

6
Aggiungo a questo: se hai sempre un particolare intervallo di celle per cui vuoi cancellare le celle vuote, potresti dare un nome a quell'intervallo, quindi modificare la formula di Boofus cambiando SomeRange in Range ("MyRange"). Per impostare un nome per le celle, selezionare le celle, fare clic su Definisci nome nella scheda Formule della barra multifunzione e immettere "MyRange" nel campo Nome. (E ovviamente potresti sostituire MyRange con tutto quello che vuoi.)
Devuxer,

31
È intenso che non esiste una costante nulla in Excel.
ted.strauss,

5
Se si inserisce la macro nella funzione worksheet_calculate (), svuoterà automaticamente le celle. Per dettagli specifici puoi vedere la mia risposta qui sotto.
Mr Purple,

3
@ ted.strauss c'èVbNullString
brettdj

5
@brettdj Questo è VBA, non Excel. Abbiamo fatto pressioni a lungo e duramente per qualche tipo di funzione come NULL () o BLANK (), senza alcun risultato.
Jon Peltier,

75

Excel non ha alcun modo per farlo.

Il risultato di una formula in una cella in Excel deve essere un numero, testo, logico (booleano) o errore. Non esiste un tipo di valore della cella formula "vuoto" o "vuoto".

Una pratica che ho visto seguire è quella di utilizzare NA () e ISNA (), ma ciò potrebbe o non potrebbe davvero risolvere il tuo problema poiché esiste una grande differenza nel modo in cui NA () viene trattato da altre funzioni (SUM (NA ( )) è # N / A mentre SUM (A1) è 0 se A1 è vuoto).


19
Il metodo NA () funziona al 100% per i grafici che sono impostati per mostrare celle vuote come spazi vuoti, questo probabilmente non funzionerà per il tuo caso in cui stai esportando in un'applicazione che ha bisogno che la cella sia vuota in quanto contiene una formula ...
Cobusve,

4
Non esiste una soluzione perfetta. NA () è una buona opzione. Un altro è la stringa vuota di (dipendente) '' o ""
Jason

Questo funziona allo scopo di restituire dinamicamente celle vuote nei dati che verranno tracciati, in modo da poter utilizzare in modo efficace l'opzione di ignorare le celle vuote come lacune nei grafici. Nel mio caso, stavo cercando di tracciare 12 valori per rappresentare una progressione mensile, ma solo fino al mese precedente, con una formula come questa: = IF (MONTH (TODAY ())> C2; $ C $ 11 + C7; NA ( ))
EKI

Questo ha funzionato per me. Ho un grafico con i dati che aggiungo ogni giorno - un grafico di burndown per la mischia e volevo vedere la linea estendersi solo al giorno corrente. Questo mi ha aiutato a farlo - usando NA () in un'istruzione IF. Grazie!
theJerm

12
NA () non si tradurrà in un divario. Tutti sbagliano. Excel non traccia un grafico se il valore è NA () o # N / A, ma disegna una linea interpolata tra valori non # N / A adiacenti.
Jon Peltier,

38

Sì, è possibile.

È possibile disporre di una formula annichilante che valuti il ​​vero valore in bianco se la condizione è soddisfatta. Passa il test di ISBLANKformula.

inserisci qui la descrizione dell'immagine

Tutto ciò di cui hai bisogno è impostare un intervallo denominato, diciamo GetTrueBlank, e sarai in grado di utilizzare il seguente modello proprio come nella tua domanda:

=IF(A1 = "Hello world", GetTrueBlank, A1)

Passaggio 1. Inserire questo codice nel modulo di VBA.

Function Delete_UDF(rng)
    ThisWorkbook.Application.Volatile
    rng.Value = ""
End Function

Fase 2. In Sheet1in A1cella add intervallo denominato GetTrueBlankcon la seguente formula:

=EVALUATE("Delete_UDF("&CELL("address",Sheet1!A1)&")")

inserisci qui la descrizione dell'immagine

Questo è tutto. Non ci sono ulteriori passaggi. Usa solo la formula auto-annichilente. Inserisci in cella, diciamo B2, la seguente formula:

=IF(A2=0,GetTrueBlank,A2)

La formula sopra in B2verrà valutata come trueblank, se si digita 0 in A2.

Puoi scaricare un file dimostrativo qui .

Nell'esempio sopra, la valutazione della formula in trueblank genera una cella vuota. Verifica del risultato conISBLANK formula risulta positivo in VERO. Questa è la formula dell'hara-kiri. La formula scompare dalla cella quando viene soddisfatta la condizione. L'obiettivo è raggiunto, anche se probabilmente potresti volere che la formula non scompaia.

È possibile modificare la formula per restituire il risultato nella cella adiacente, in modo che la formula non si uccida da sola. Scopri come ottenere il risultato UDF nella cella adiacente .

Ho trovato gli esempi di come ottenere un risultato in bianco come risultato di una formula rivelato da The FrankensTeam qui: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another- cellula


5
Questo è fottutamente dolce soluzione, anche se è piuttosto folle che non c'è modo di farlo senza svuotare fisicamente la cella. L'unico svantaggio qui sarebbe che dovresti ricordare di trascinare nuovamente la formula verso il basso durante il ricalcolo, anche se immagino che potresti impostare un evento della cartella di lavoro per farlo.
Some_Guy

Prima di tentare di utilizzare la soluzione alternativa dolce, si noti che potrebbe non funzionare .
GSerg,

@GSerg Stai solo dicendo che puoi creare un loop con VBA che andrà all'infinito e in questo modo il programma si bloccherà? VBA potrebbe essere un rasoio nelle mani di una scimmia. E c'è una voce che anche un leone abbia sparato. Che dovrebbe spaventare di più :-)
Przemyslaw Remin,

@PrzemyslawRemin No, sto dicendo che possono accadere varie cose casuali, incluso l' arresto anomalo di Excel .
GSerg,

20

Forse questo è un imbroglio, ma funziona!

Avevo anche bisogno di una tabella che è la fonte di un grafico e non volevo che nessuna cella vuota o zero producesse un punto sul grafico. È vero che è necessario impostare la proprietà del grafico, selezionare i dati, celle nascoste e vuote per "mostrare celle vuote come spazi vuoti" (fare clic sul pulsante di opzione). Questo è il primo passo.

Quindi nelle celle che potrebbero finire con un risultato che non si desidera tracciare, inserire la formula in un'istruzione IF con NA()risultati come=IF($A8>TODAY(),NA(), *formula to be plotted*)

Ciò fornisce il grafico richiesto senza punti quando si verifica un valore di cella non valido. Naturalmente questo lascia tutte le celle con quel valore non valido da leggere #N/A, e questo è disordinato.

Per ripulire, seleziona la cella che può contenere il valore non valido, quindi seleziona la formattazione condizionale - nuova regola. Seleziona "formatta solo celle che contengono" e nella descrizione della regola seleziona "errori" dalla casella a discesa. Quindi in formato selezionare font - colore - bianco (o qualunque sia il tuo colore di sfondo). Fai clic sui vari pulsanti per uscire e dovresti vedere che le celle con dati non validi sembrano vuote (in realtà contengono #N/Ama il testo bianco su uno sfondo bianco sembra vuoto.) Quindi anche il grafico collegato non mostra i punti di valore non validi.


6
NO!!! "mostra celle vuote come spazi vuoti" Richiede che le celle siano VUOTE. Se contengono # N / A anziché NULLA, la routine grafica interpolerà sulle celle # N / A anziché lasciarle come spazi vuoti nella linea. Se vuoi che le celle # N / A vengano interpolate, va bene, ma in quel caso "mostra celle vuote come lacune" NON SI APPLICA
Mr Purple

4
@GreenAsJade Questa non è la vera risposta perché non si adatta alle esigenze del PO. Dovrebbe esserci davvero una domanda separata per il problema grafico.
ZX9

10

Ecco come l'ho fatto per il set di dati che stavo usando. Sembra contorto e stupido, ma è stata l'unica alternativa all'apprendimento dell'uso della soluzione VB sopra menzionata.

  1. Ho fatto una "copia" di tutti i dati e li ho incollati come "valori".
  2. Quindi ho evidenziato i dati incollati e ho fatto un "rimpiazzo" ( Ctrl- H) le celle vuote con una lettera, ho scelto qdal momento che non era in nessun punto della mia scheda tecnica.
  3. Alla fine, ho fatto un altro "rimpiazzo", e sostituito qcon niente.

Questo processo in tre passaggi ha trasformato tutte le celle "vuote" in celle "vuote". Ho provato a unire i passaggi 2 e 3 semplicemente sostituendo la cella vuota con una cella vuota, ma non ha funzionato - ho dovuto sostituire il cella vuota con una sorta di testo effettivo, quindi sostituisci quel testo con una cella vuota.


Anche se questo potrebbe aver funzionato nel tuo caso, avevo bisogno di una soluzione che potesse essere applicata automaticamente. Alla fine, penso di aver usato una macro VB per cancellare cose che erano state definite vuote. Questa macro è stata eseguita subito prima di salvare il file.
Bryan Ward,

4
questo è stato il migliore per me perché non ho bisogno che sia automatico, ma ho bisogno che sia veloce. In sostanza, significa che Excel rispetta un valore vuoto aggiunto tramite Trova e sostituisci, il che è abbastanza buono per me!
rickcnagy,

10

Se l'obiettivo è essere in grado di visualizzare una cella vuota quando in realtà ha il valore zero, quindi invece di utilizzare una formula che risulta in una cella vuota o vuota (poiché non esiste alcuna empty()funzione),

  • dove si desidera una cella vuota, restituire un 0anziché ""e THEN

  • imposta il formato numerico per le celle in questo modo, dove dovrai trovare ciò che desideri per i numeri positivi e negativi (i primi due elementi separati da punti e virgola). Nel mio caso, i numeri che avevo erano 0, 1, 2 ... e volevo che 0 venisse visualizzato vuoto. (Non ho mai capito a cosa servisse il parametro text, ma sembrava essere necessario).

    0;0;"";"text"@
    

4
Sebbene ciò non renda vuota la cella (non è possibile che una formula dia luogo a una cella vuota), la fa sembrare vuota se il numero è zero. Tuttavia, non è corretto. Dovrebbe essere 0; -0; "" (notare il segno meno) o anche 0; -0; senza alcuna citazione. Il terzo punto e virgola e la parte "testo" @ non sono richiesti. Il significato dei campi delimitati da punto e virgola è: come visualizzare numeri positivi, numeri negativi, zero e testo (quest'ultimo formato deve contenere una @). office.microsoft.com/en-gb/excel-help/…
cvoinescu

Sei un dio signore. Mi hai salvato da Visual Basic. Tu governi
CommaToast

7

Prova a valutare la cella usando LEN. Se contiene una formula LENrestituirà 0. Se contiene testo, verrà restituito maggiore di 0.


Anche se questo non aiuta chi lo chiede originale, in molti casi questa non è una cattiva risposta. Funziona bene per i casi in cui sei stato costretto a tornare "".
Tecnica

Ottima risposta ma un po 'confusa. La cella che voglio testare restituisce un numero o"" oppure è vuota. LEN(cell)>0restituisce true se è presente un numero (incluso zero e incluso se il numero è calcolato da una formula) e false se stringa vuota o vuota.
Chris,

7

Wow, un numero incredibile di persone ha letto male la domanda. E 'facile fare una cella sguardo vuoto. Il problema è che se hai bisogno che la cella sia vuota, le formule di Excel non possono restituire "nessun valore" ma possono solo restituire un valore. Restituire uno zero, uno spazio o persino "" è un valore.

Quindi devi restituire un "valore magico" e poi sostituirlo senza alcun valore usando cerca e sostituisci o usando uno script VBA. Mentre potresti usare uno spazio o "", il mio consiglio sarebbe di usare un valore ovvio, come "NODATE" o "NONUMBER" o "XXXXX" in modo da poter vedere facilmente dove si trova - è piuttosto difficile da trovare "" in un foglio di calcolo.


1
Sì, questo è quello che ho fatto. Ho usato una funzione per generare "#EMPTY", quindi ho inserito un po 'di codice nella subroutine "Calcola foglio di lavoro". Controlla la mia risposta per la soluzione completa.
Mr Purple,

7

Uso COUNTBLANK(B1)>0 invece che ISBLANK(B1)dentro la tua IFaffermazione.

Diversamente ISBLANK(), COUNTBLANK()considera ""vuoto e restituisce 1.


Purtroppo sembra che Excel rifiuti = COUNTBLANK (IFNA (VLOOKUP (...), "")) come non valido (!)
NetMage,

6

Così tante risposte che restituiscono un valore che sembra vuoto ma che in realtà non è vuoto come cella come richiesto ...

Come richiesto, se si desidera effettivamente una formula che restituisce una cella vuota. È possibile tramite VBA. Quindi, ecco il codice per fare esattamente questo. Inizia scrivendo una formula per restituire l'errore # N / A ovunque desideri che le celle siano vuote. Quindi la mia soluzione cancella automaticamente tutte le celle che contengono quell'errore # N / A. Ovviamente puoi modificare il codice per eliminare automaticamente il contenuto delle celle in base a ciò che ti piace.

Apri il "Visual Basic Visualizzatore" (Alt + F11) Trova la cartella di lavoro di interesse nell'esploratore del progetto e fai doppio clic su di essa (o fai clic con il pulsante destro del mouse e seleziona Visualizza codice). Si aprirà la finestra "Visualizza codice". Seleziona "Cartella di lavoro" nel menu a discesa (Generale) e "Foglio calcola" nel menu a discesa (Dichiarazioni).

Incolla il seguente codice (basato sulla risposta di JT Grimes) all'interno della funzione Workbook_SheetCalculate

    For Each cell In Sh.UsedRange.Cells
        If IsError(cell.Value) Then
            If (cell.Value = CVErr(xlErrNA)) Then cell.ClearContents
        End If
    Next

Salvare il file come cartella di lavoro abilitata per le macro

NB: questo processo è come un bisturi. Rimuoverà l'intero contenuto di tutte le celle che valutano l'errore # N / A, quindi fai attenzione. Andranno e non puoi recuperarli senza rientrare nella formula che contenevano.

NB2: Ovviamente devi abilitare le macro quando apri il file altrimenti non funzionerà e gli errori # N / A rimarranno non eliminati


2
Se è necessario che sia completamente automatico / vivavoce / dinamico e non si desidera immettere nuovamente la formula per generare l'errore #NA, è possibile riscrivere il codice macro per duplicare il foglio in questione lasciando celle vuote al posto di #NA, quindi generare grafici dal foglio duplicato. (Aggiungerò il codice se questo commento viene mai votato).
Mr Purple,

4

Questa risposta non riguarda completamente l'OP, ma ci sono state diverse volte in cui ho avuto un problema simile e ho cercato la risposta.

Se è possibile ricreare la formula o i dati, se necessario (e dalla descrizione sembra che sia possibile), quindi quando si è pronti per eseguire la parte che richiede che le celle vuote siano effettivamente vuote , è possibile selezionare l'area e eseguire la seguente macro vba.

Sub clearBlanks()
    Dim r As Range
    For Each r In Selection.Cells
        If Len(r.Text) = 0 Then
            r.Clear
        End If
    Next r
End Sub

questo cancellerà il contenuto di qualsiasi cella che sta mostrando ""o ha solo una formula


4

Quello che ho usato è stato un piccolo trucco. Ho usato T (1), che ha restituito una cella vuota. T è una funzione in Excel che restituisce il suo argomento se è una stringa e una cella vuota in caso contrario. Quindi, quello che puoi fare è:

=IF(condition,T(1),value)

Crea una stringa di lunghezza zero (ISBLANK (CELL) = FALSE).
vin

Funziona e dovrebbe essere la risposta accettata. Grazie mille, Ahmed. Il mio caso d'uso è un po 'diverso. Voglio lasciare le celle vuote in modo che funzioni aggregate come AVERAGE (), MIN (), MAX (), STDEV (), COUNT () e MEDIAN () ignorino i valori.
Charlie Reitzel,

2

Ho usato il seguente lavoro in giro per rendere il mio excel più pulito:

Quando esegui dei calcoli, "" ti darà un errore, quindi vuoi trattarlo come un numero, così ho usato un'istruzione if annidata per restituire 0 invece di "", e quindi se il risultato è 0 questa equazione restituirà ""

=IF((IF(A5="",0,A5)+IF(B5="",0,B5)) = 0, "",(IF(A5="",0,A5)+IF(B5="",0,B5)))

In questo modo il foglio Excel sembrerà pulito ...


1
Questa non è una soluzione al problema. Il foglio sembra pulito, ma il valore "" non è "vuoto" per quanto riguarda i grafici.
GreenAsJade,

1

Se si utilizzano funzioni di ricerca come HLOOKUP e VLOOKUP per portare i dati nel foglio di lavoro, posizionare la funzione tra parentesi e la funzione restituirà una cella vuota anziché {0}. Per esempio,

Ciò restituirà un valore zero se la cella di ricerca è vuota:

    =HLOOKUP("Lookup Value",Array,ROW,FALSE)

Questo restituirà una cella vuota se la cella di ricerca è vuota:

    =(HLOOKUP("Lookup Value",Array,ROW,FALSE))

Non so se funziona con altre funzioni ... Non ho provato. Sto usando Excel 2007 per raggiungere questo obiettivo.

modificare

Per ottenere effettivamente un IF (A1 = "",,) per tornare come vero, è necessario che siano presenti due ricerche nella stessa cella separate da un &. Il modo semplice per aggirare questo è rendere la seconda ricerca una cella che si trova alla fine della riga e sarà sempre vuota.


1

Bene, finora questo è il migliore che ho potuto inventare.

Usa la ISBLANKfunzione per verificare se la cella è veramente vuota all'interno di IFun'istruzione. Se nella cella è presente qualcosa, A1in questo esempio, anche un carattere SPAZIO, la cella non lo èEMPTY e il calcolo risulta. Ciò manterrà la visualizzazione degli errori di calcolo fino a quando non avrai i numeri con cui lavorare.

Se la cella è EMPTYquindi la cella di calcolo non visualizzerà gli errori dal calcolo. Se la cella è quindi verranno visualizzati i NOT EMPTYrisultati del calcolo. Questo genererà un errore se i tuoi dati sono cattivi, il temuto #DIV/0!

=IF(ISBLANK(A1)," ",STDEV(B5:B14))

Modifica i riferimenti di cella e la formula di cui hai bisogno.


1
Il problema è che devi propagare questo controllo su ogni altra cella usando questo risultato.
Guthrie,

0

La risposta è positiva: non è possibile utilizzare la funzione = IF () e lasciare vuota la cella. "Sembra vuoto" non è uguale a vuoto. È un peccato che due virgolette da una parte all'altra non producano una cella vuota senza cancellare la formula.


Se sei pronto a utilizzare VBA, puoi farlo. Come da alcune altre risposte.
Sig. Purple,

-1

Google mi ha portato qui con un problema molto simile, ho finalmente trovato una soluzione adatta alle mie esigenze, potrebbe aiutare anche qualcun altro ...

Ho usato questa formula:

=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")
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.