Renvoyer la cellule vide de la formule dans Excel

219

Je dois renvoyer une cellule vide à partir d'une formule Excel, mais il semble qu'Excel traite une chaîne vide ou une référence à une cellule vide différemment d'une vraie cellule vide. Donc, essentiellement, j'ai besoin de quelque chose comme

=IF(some_condition,EMPTY(),some_value)

J'ai essayé de faire des choses comme

=IF(some_condition,"",some_value)

et

=IF(some_condition,,some_value)

et en supposant que B1 est une cellule vide

=IF(some_condition,B1,some_value)

mais aucun de ceux-ci ne semble être de vraies cellules vides, je suppose que c'est le résultat d'une formule. Existe-t-il un moyen de remplir une cellule si et seulement si une condition est remplie et sinon de garder la cellule vraiment vide?

EDIT: comme recommandé, j'ai essayé de retourner NA (), mais pour mes besoins, cela n'a pas fonctionné non plus. Existe-t-il un moyen de le faire avec VB?

EDIT: Je suis en train de construire une feuille de calcul qui extrait des données d'autres feuilles de calcul qui est formatée pour les demandes très spécifiques d'une application qui importe les données dans une base de données. Je n'ai pas accès pour changer l'implémentation de cette application, et elle échoue si la valeur est "" au lieu d'être réellement vide.

Bryan Ward
la source
8
Pouvez-vous expliquer pourquoi la cellule doit être vide? Selon ce que le «vide» vous apporte, il peut y avoir une solution de contournement.
JT Grimes
3
La cellule contient la formule, n'est-ce pas? Comment peut-il être vide ou vide alors?
Sinan Ünür
8
J'ai un problème similaire, je dessine un graphique et je ne veux pas afficher la valeur 0 pour les éléments vides sur le graphique. Si les enregistrements sont des cellules vides, il les omet du graphique, mais l'une des méthodes répertoriées dans les «réponses» ci-dessous entraîne l'affichage de 0 sur le graphique. :(
Cobusve
5
Pour éviter que des zéros soient affichés sur les graphiques, utilisez la fonction NA () au lieu de la chaîne vide / zéro. Cela mettra # N / A dans la cellule, ce qui est ignoré par la routine graphique.
Rob
5
La suggestion de Rob d'utiliser # N / A a un résultat différent d'une cellule vide. # N / A entraînera l'interpolation de la routine graphique sur la cellule tandis qu'une cellule vraiment vide sera traitée comme un espace dans la ligne. Si vous voulez un GAP dans la ligne plutôt qu'une INTERPOLATION à travers l'intervalle, vous devez que la cellule soit VIDE et non # N / A selon la question. Il existe des solutions ci-dessous qui répondent à cela comme demandé.
Mr Purple

Réponses:

50

Vous allez devoir utiliser VBA, alors. Vous allez parcourir les cellules de votre plage, tester la condition et supprimer le contenu s'il correspond.

Quelque chose comme:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next
JT Grimes
la source
6
J'ajouterais à cela: si vous avez toujours une plage particulière de cellules pour laquelle vous souhaitez effacer les cellules vides, vous pouvez donner un nom à cette plage, puis modifier la formule de Boofus en changeant SomeRange en Range ("MyRange"). Pour définir un nom pour vos cellules, sélectionnez les cellules, cliquez sur Définir le nom dans l'onglet Formules du ruban et entrez "MyRange" dans le champ Nom. (Et bien sûr, vous pouvez remplacer MyRange par tout ce que vous voulez.)
devuxer
31
C'est intense qu'il n'y a pas de constante nulle dans Excel.
ted.strauss
5
Si vous placez la macro dans la fonction worksheet_calculate (), elle videra automatiquement les cellules. Pour des détails spécifiques, vous pouvez voir ma réponse ci-dessous.
Mr Purple
3
@ ted.strauss il y aVbNullString
brettdj
5
@brettdj C'est VBA, pas Excel. Nous avons fait pression longuement et durement pour une sorte de fonction comme NULL () ou BLANK (), en vain.
Jon Peltier
75

Excel n'a aucun moyen de le faire.

Le résultat d'une formule dans une cellule dans Excel doit être un nombre, du texte, logique (booléen) ou une erreur. Il n'y a pas de type de valeur de cellule de formule "vide" ou "vide".

Une pratique que j'ai vue suivre est d'utiliser NA () et ISNA (), mais cela peut ou peut ne pas vraiment résoudre votre problème car il existe une grande différence dans la façon dont NA () est traité par d'autres fonctions (SUM (NA ( )) est # N / A tandis que SUM (A1) est 0 si A1 est vide).

Joe Erickson
la source
19
La méthode NA () fonctionne à 100% pour les graphiques qui sont définis pour afficher les cellules vides comme des lacunes, cela ne fonctionnera probablement pas pour votre cas où vous exportez vers une application qui a besoin que la cellule soit vide car elle contient une formule ...
Cobusve
4
Il n'y a pas de solution parfaite. NA () est une bonne option. Un autre est la chaîne vide de (selon) '' ou ""
Jason
Cela fonctionne dans le but de renvoyer des cellules vides dans des données qui vont être tracées, de sorte que vous pouvez utiliser efficacement l'option d'ignorer les cellules vides comme lacunes dans les graphiques. Dans mon cas, j'essayais de tracer 12 valeurs pour représenter une progression mensuelle, mais uniquement jusqu'au mois précédent, avec une formule comme celle-ci: = IF (MONTH (TODAY ())> C2; $ C $ 11 + C7; NA ( ))
EKI
Cela a fonctionné pour moi. J'ai un graphique avec des données que j'ajoute à tous les jours - un graphique de burndown pour la mêlée et je voulais que la ligne ne s'étende qu'au jour en cours. Cela m'a aidé à le faire - en utilisant NA () dans une instruction IF. Merci!
theJerm
12
NA () n'entraînera pas d'écart. Tout le monde se trompe. Excel ne tracera pas de marqueur si la valeur est NA () ou # N / A, mais il dessinera une ligne interpolée entre les valeurs adjacentes non # N / A.
Jon Peltier
38

Oui c'est possible.

Il est possible d'avoir une formule annihilante évaluant à trueblank si la condition est remplie. Il passe le test de la ISBLANKformule.

entrez la description de l'image ici

Tout ce dont vous avez besoin est de configurer une plage nommée, par exemple GetTrueBlank, et vous pourrez utiliser le modèle suivant comme dans votre question:

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

Étape 1. Mettez ce code dans le module de VBA.

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

Étape 2. Dans Sheet1dans la A1cellule ajouter plage nommée GetTrueBlankla formule suivante:

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

entrez la description de l'image ici

C'est tout. Il n'y a pas d'autres étapes. Utilisez simplement la formule auto-annihilante. Mettez dans la cellule, disons B2, la formule suivante:

=IF(A2=0,GetTrueBlank,A2)

La formule ci-dessus dans B2sera évaluée à trueblank, si vous tapez 0 dans A2.

Vous pouvez télécharger un fichier de démonstration ici .

Dans l'exemple ci-dessus, l'évaluation de la formule en trueblank entraîne une cellule vide. La vérification du résultat avec la ISBLANKformule donne un résultat positif en VRAI. C'est une formule de type hara-kiri. La formule disparaît de la cellule lorsque la condition est remplie. L'objectif est atteint, bien que vous souhaitiez probablement que la formule ne disparaisse pas.

Vous pouvez modifier la formule pour renvoyer le résultat dans la cellule adjacente, afin que la formule ne se tue pas d'elle-même. Découvrez comment obtenir un résultat UDF dans une cellule adjacente .

Je suis tombé sur les exemples d'obtention d'un trueblank comme résultat de formule révélé par The FrankensTeam ici: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another- cellule

Przemyslaw Remin
la source
5
C'est une solution de contournement douce, bien qu'il soit assez fou qu'il n'y ait aucun moyen de le faire sans vider physiquement la cellule. Le seul inconvénient ici serait que vous devez vous rappeler de faire glisser la formule vers le bas lors du recalcul, bien que je suppose que vous pouvez définir un événement de classeur pour ce faire.
Some_Guy
Avant d'essayer d'utiliser cette solution de contournement, veuillez noter qu'elle peut se retourner contre vous .
GSerg
@GSerg Êtes-vous en train de dire que vous pouvez faire une boucle avec VBA qui ira indéfiniment et de cette façon le programme se bloquera? VBA pourrait être un rasoir entre les mains d' un singe. Et il y a une rumeur selon laquelle un lion a également riposté Cela devrait effrayer davantage :-)
Przemyslaw Remin
@PrzemyslawRemin Non, je dis que diverses choses aléatoires peuvent se produire, y compris plantage d'Excel .
GSerg
20

C'est peut-être de la triche, mais ça marche!

J'avais également besoin d'un tableau qui est la source d'un graphique, et je ne voulais pas que des cellules vides ou nulles produisent un point sur le graphique. Il est vrai que vous devez définir la propriété du graphique, sélectionner les données, les cellules cachées et vides pour "afficher les cellules vides comme des lacunes" (cliquez sur le bouton radio). Voilà la première étape.

Ensuite, dans les cellules qui peuvent aboutir à un résultat que vous ne voulez pas tracer, mettez la formule dans une instruction IF avec des NA()résultats tels que=IF($A8>TODAY(),NA(), *formula to be plotted*)

Cela donne le graphique requis sans points lorsqu'une valeur de cellule non valide se produit. Bien sûr, cela laisse toutes les cellules avec cette valeur non valide à lire #N/A, et c'est désordonné.

Pour nettoyer cela, sélectionnez la cellule qui peut contenir la valeur non valide, puis sélectionnez mise en forme conditionnelle - nouvelle règle. Sélectionnez «formater uniquement les cellules qui contiennent» et sous la description de la règle, sélectionnez «erreurs» dans la liste déroulante. Ensuite, sous format, sélectionnez police - couleur - blanc (ou quelle que soit la couleur d'arrière-plan). Cliquez sur les différents boutons pour sortir et vous devriez voir que les cellules avec des données non valides semblent vides (elles contiennent en fait #N/Amais du texte blanc sur fond blanc semble vide.) Ensuite, le graphique lié n'affiche pas non plus les points de valeur non valides.

Gentle Knight
la source
6
NON!!! "afficher les cellules vides comme des lacunes" Nécessite que les cellules soient vides. S'ils contiennent # N / A plutôt que RIEN alors la routine graphique interpolera sur les cellules # N / A plutôt que de les laisser comme des espaces dans la ligne. Si vous voulez que les cellules # N / A soient interpolées, c'est bien, mais dans ce cas, "affichez les cellules vides comme des lacunes" NE S'APPLIQUE PAS
Mr Purple
4
@GreenAsJade Ce n'est pas la vraie réponse car elle ne correspond pas aux besoins du PO. Il devrait vraiment y avoir une question distincte pour la question graphique.
ZX9
10

C'est ainsi que je l'ai fait pour l'ensemble de données que j'utilisais. Cela semble compliqué et stupide, mais c'était la seule alternative à l'apprentissage de l'utilisation de la solution VB mentionnée ci-dessus.

  1. J'ai fait une "copie" de toutes les données et collé les données en tant que "valeurs".
  2. Ensuite, j'ai mis en surbrillance les données collées et j'ai fait un "remplacement" ( Ctrl- H) des cellules vides par une lettre, j'ai choisiq car il n'y avait nulle part sur ma fiche technique.
  3. Enfin, j'ai fait un autre "remplacement", et remplacé q par rien.

Ce processus en trois étapes a transformé toutes les cellules "vides" en cellules "vides". J'ai essayé de fusionner les étapes 2 et 3 en remplaçant simplement la cellule vide par une cellule vide, mais cela n'a pas fonctionné - j'ai dû remplacer le cellule vide avec une sorte de texte réel, puis remplacez ce texte par une cellule vide.

Jeramy
la source
Bien que cela ait pu fonctionner dans votre cas, j'avais besoin d'une solution qui pourrait être appliquée automatiquement. En fin de compte, je pense que j'ai utilisé une macro VB pour effacer des choses qui étaient déterminées comme vides. Cette macro a été exécutée juste avant l'enregistrement du fichier.
Bryan Ward
4
c'était mieux pour moi car je n'ai pas besoin que ce soit automatique, mais j'ai besoin que ce soit rapide. Essentiellement, cela signifie qu'Excel respecte une valeur ajoutée vierge via Find and Replace, ce qui est assez bon pour moi!
rickcnagy
10

Si l'objectif est de pouvoir afficher une cellule comme vide alors qu'elle a en fait la valeur zéro, alors au lieu d'utiliser une formule qui aboutit à une cellule vide ou vide (puisqu'il n'y a pas de empty()fonction) à la place,

  • où vous voulez une cellule vide, retournez un 0au lieu de ""et ALORS

  • définissez le format numérique pour les cellules comme ceci, où vous devrez trouver ce que vous voulez pour les nombres positifs et négatifs (les deux premiers éléments séparés par des points-virgules). Dans mon cas, les chiffres que j'avais étaient 0, 1, 2 ... et je voulais que 0 apparaisse vide. (Je n'ai jamais compris à quoi servait le paramètre de texte, mais il semblait nécessaire).

    0;0;"";"text"@
    
ET-X
la source
4
Bien que cela ne rende pas la cellule vide (il n'y a aucun moyen pour une formule de se traduire par une cellule vide), cela la fait paraître vide si le nombre est zéro. Cependant, c'est incorrect. Il doit être 0; -0; "" (notez le signe moins) ou même 0; -0; sans aucune citation du tout. Le troisième point-virgule et la partie "text" @ ne sont pas obligatoires. La signification des champs délimités par des points-virgules est: comment afficher les nombres positifs, négatifs, zéro et le texte (ce dernier format doit contenir un @). office.microsoft.com/en-gb/excel-help/…
cvoinescu
Vous êtes un dieu monsieur. Vous m'avez sauvé du Visual Basic. Vous
réglez
7

Essayez d'évaluer la cellule à l'aide de LEN. S'il contient une formule LENreviendra 0. S'il contient du texte, il retournera supérieur à 0.

Alex
la source
Bien que cela n'aide pas le demandeur d'origine, ce n'est pas en fait une mauvaise réponse dans de nombreux cas. Cela fonctionne bien pour les cas où vous avez été forcé de revenir "".
Technium
Excellente réponse mais un peu déroutante. La cellule que je veux tester renvoie un nombre ou ""ou est vide. LEN(cell)>0renvoie vrai s'il y a un nombre (y compris zéro et y compris si le nombre est calculé par une formule), et faux s'il s'agit d'une chaîne vide ou vide.
Chris
7

Wow, un nombre incroyable de personnes ont mal lu la question. Il est facile de faire une cellule regard vide. Le problème est que si vous avez besoin que la cellule soit vide, les formules Excel ne peuvent pas renvoyer "aucune valeur" mais peuvent uniquement renvoyer une valeur. Renvoyer un zéro, un espace ou même "" est une valeur.

Vous devez donc renvoyer une «valeur magique», puis la remplacer par aucune valeur à l'aide de la recherche et du remplacement, ou à l'aide d'un script VBA. Bien que vous puissiez utiliser un espace ou "", mon conseil serait d'utiliser une valeur évidente, telle que "NODATE" ou "NONUMBER" ou "XXXXX" afin que vous puissiez facilement voir où cela se produit - il est assez difficile de trouver "" dans une feuille de calcul.

Laird Popkin
la source
1
C'est ce que j'ai fait. J'ai utilisé une fonction pour générer "#EMPTY", puis j'ai ajouté du code dans le sous-programme d'événement "worksheet Calculate". Vérifiez ma réponse pour la solution complète.
Mr Purple
7

Utilisez COUNTBLANK(B1)>0au lieu de l' ISBLANK(B1)intérieur de votreIF déclaration.

Contrairement à ISBLANK(), COUNTBLANK()considère ""comme vide et renvoie 1.

Kevin Vuilleumier
la source
Malheureusement, il semble qu'Excel rejette = COUNTBLANK (IFNA (VLOOKUP (...), "")) comme invalide (!)
NetMage
6

Autant de réponses qui renvoient une valeur qui semble vide mais qui n'est pas en fait une cellule vide comme demandé ...

Comme demandé, si vous voulez réellement une formule qui renvoie une cellule vide. C'est possible via VBA. Voici donc le code pour faire exactement cela. Commencez par écrire une formule pour renvoyer l'erreur # N / A où vous voulez que les cellules soient vides. Ensuite, ma solution efface automatiquement toutes les cellules qui contiennent cette erreur # N / A. Bien sûr, vous pouvez modifier le code pour supprimer automatiquement le contenu des cellules en fonction de tout ce que vous aimez.

Ouvrez la "visionneuse visuelle de base" (Alt + F11) Trouvez le classeur qui vous intéresse dans l'explorateur de projet et double-cliquez dessus (ou cliquez avec le bouton droit et sélectionnez le code d'affichage). Cela ouvrira la fenêtre "voir le code". Sélectionnez "Classeur" dans le menu déroulant (Général) et "SheetCalculate" dans le menu déroulant (Déclarations).

Collez le code suivant (basé sur la réponse de JT Grimes) dans la fonction 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

Enregistrez votre fichier en tant que classeur compatible avec les macros

NB: Ce processus est comme un scalpel. Il supprimera tout le contenu de toutes les cellules évaluées à l'erreur # N / A, alors soyez conscient. Ils iront et vous ne pouvez pas les récupérer sans rentrer dans la formule qu'ils contenaient.

NB2: De toute évidence, vous devez activer les macros lorsque vous ouvrez le fichier, sinon cela ne fonctionnera pas et les erreurs # N / A resteront non supprimées

Mr Purple
la source
2
Si vous en avez besoin pour être entièrement automatique / mains libres / dynamique et que vous ne voulez pas entrer à nouveau la formule pour générer l'erreur #NA, vous pouvez réécrire le code de macro pour dupliquer la feuille en question en laissant des cellules vides à la place de #NA puis générer des graphiques de la feuille en double. (J'ajouterai le code si ce commentaire est déjà voté).
Mr Purple
4

Cette réponse ne traite pas entièrement de l'OP, mais il y a eu plusieurs fois j'ai eu un problème similaire et j'ai cherché la réponse.

Si vous pouvez recréer la formule ou les données si nécessaire (et à partir de votre description, cela semble possible), alors lorsque vous êtes prêt à exécuter la partie qui nécessite que les cellules vides soient réellement vides , vous pouvez sélectionner la région et exécutez la macro vba suivante.

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

cela effacera le contenu de toute cellule qui affiche actuellement ""ou n'a qu'une formule

ElderDelp
la source
4

Ce que j'ai utilisé était un petit hack. J'ai utilisé T (1), qui a renvoyé une cellule vide. T est une fonction dans Excel qui renvoie son argument si c'est une chaîne et une cellule vide sinon. Donc, ce que vous pouvez faire, c'est:

=IF(condition,T(1),value)
Ahmed Shahid
la source
Crée une chaîne de longueur nulle (ISBLANK (CELL) = FALSE).
vinh
Cela fonctionne et devrait être la réponse acceptée. Merci beaucoup, Ahmed. Mon cas d'utilisation est un peu différent. Je veux laisser les cellules vides afin que les fonctions d'agrégation comme AVERAGE (), MIN (), MAX (), STDEV (), COUNT () et MEDIAN () ignorent les valeurs.
Charlie Reitzel
2

J'ai utilisé le travail suivant pour rendre mon Excel plus propre:

Lorsque vous effectuez des calculs, le "" vous donnera une erreur, vous voulez donc le traiter comme un nombre, j'ai donc utilisé une instruction imbriquée if pour retourner 0 au lieu de "", puis si le résultat est 0, cette équation retournera ""

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

De cette façon, la feuille Excel aura l'air propre ...

Big Z
la source
1
Ce n'est pas une solution au problème. La feuille semble propre, mais la valeur "" n'est pas "vide" en ce qui concerne les graphiques.
GreenAsJade
1

Si vous utilisez des fonctions de recherche comme HLOOKUP et VLOOKUP pour importer les données dans votre feuille de calcul, placez la fonction entre crochets et la fonction renverra une cellule vide au lieu d'un {0}. Par exemple,

Cela retournera une valeur nulle si la cellule de recherche est vide:

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

Cela retournera une cellule vide si la cellule de recherche est vide:

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

Je ne sais pas si cela fonctionne avec d'autres fonctions ... Je n'ai pas essayé. J'utilise Excel 2007 pour y parvenir.

Éditer

Pour que réellement un IF (A1 = "",,) revienne comme vrai, il doit y avoir deux recherches dans la même cellule séparées par un &. Le moyen le plus simple consiste à faire de la deuxième recherche une cellule qui se trouve à la fin de la ligne et sera toujours vide.

Matthew Dolman
la source
1

Jusqu'à présent, c'est le meilleur que j'ai pu trouver.

Il utilise la ISBLANKfonction pour vérifier si la cellule est vraiment vide dans une IFinstruction. S'il y a quelque chose dans la cellule, A1dans cet exemple, même un caractère ESPACE, alors la cellule n'est pasEMPTY et le calcul en résultera. Cela empêchera les erreurs de calcul de s'afficher jusqu'à ce que vous ayez des nombres avec lesquels travailler.

Si la cellule est EMPTYalors la cellule de calcul n'affichera pas les erreurs du calcul.Si la cellule est NOT EMPTYalors les résultats du calcul seront affichés. Cela lancera une erreur si vos données sont mauvaises, le redouté #DIV/0!

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

Modifiez les références de cellule et la formule selon vos besoins.

Stevis Geekus
la source
1
Le problème est que vous devez ensuite propager cette vérification à toutes les autres cellules en utilisant ce résultat.
guthrie
0

La réponse est positive - vous ne pouvez pas utiliser la fonction = IF () et laisser la cellule vide. "Semble vide" n'est pas la même chose que vide. Il est dommage que deux guillemets dos à dos ne donnent pas une cellule vide sans effacer la formule.

Ken
la source
Si vous êtes prêt à utiliser VBA, vous le pouvez. Selon d'autres réponses.
Mr Purple
-1

Google m'a amené ici avec un problème très similaire, j'ai finalement trouvé une solution qui correspond à mes besoins, cela pourrait aussi aider quelqu'un d'autre ...

J'ai utilisé cette formule:

=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")
hamish
la source