web-dev-qa-db-fra.com

Renvoyer une cellule vide de la formule dans Excel

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 aucune d'entre elles ne semble être de véritables cellules vides, je suppose, car elles sont le résultat d'une formule. Existe-t-il un moyen de remplir une cellule si et seulement si une condition est remplie et de garder la cellule réellement vide?

EDIT: comme recommandé, j'ai essayé de renvoyer NA (), mais cela ne fonctionnait pas non plus. Y at-il un moyen de faire cela avec VB?

EDIT: Je construis une feuille de travail qui extrait des données d’autres feuilles formatées en fonction des demandes spécifiques d’une application qui importe ces données dans une base de données. Je n'ai pas accès à la modification de l'implémentation de cette application, et elle échoue si la valeur est "" au lieu d'être réellement vide.

205
Bryan Ward

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

Quelque chose comme:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next
48
J.T. Grimes

Excel n'a aucun moyen de le faire.

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

Une pratique que j’ai suivie est d’utiliser NA () et ISNA (), mais cela peut ou ne peut 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 alors que SUM (A1) est égal à 0 si A1 est vide).

70
Joe Erickson

Oui c'est possible.

Il est possible d’avoir une formule annihilante donnant la valeur trueblank si la condition est remplie. Il passe le test de la formule ISBLANK.

Après avoir configuré 3 étapes, vous pourrez utiliser la plage nommée GetTrueBlank, comme vous le souhaitez dans votre réponse:

=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 Sheet1 dans A1 la cellule ajoute une plage nommée GetTrueBlank avec la formule suivante:

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

enter image description here

Étape 3. Utilisez une formule auto-annihilante. Mettez en cellule, dites B2, la formule suivante:

=IF(A2=0,GetTrueBlank,A2)

enter image description here

La formule ci-dessus dans B2 sera é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 donne une cellule vide. La vérification du résultat avec la formule ISBLANK aboutit à VRAI. C'est une formule comme le hara-kiri. La formule disparaît de la cellule lorsque la condition est remplie. L'objectif est atteint, même si vous souhaitez probablement que la formule ne disparaisse pas.

Vous pouvez modifier la formule pour renvoyer le résultat dans une cellule adjacente, afin que la formule ne se tue pas. Voir comment obtenir le résultat UDF dans une cellule adjacente .

J'ai rencontré les exemples d'obtention d'un trueblank comme résultat d'une formule révélée par The FrankensTeam ici: https://sites.google.com/site/e90e50/Excel-formula-to-change-the-value- d'une autre cellule

31
Przemyslaw Remin

Peut-être que c'est de la triche, mais ça marche!

J'avais aussi besoin d'un tableau qui soit 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 des données, des cellules cachées et vides pour "afficher les cellules vides sous forme d'espaces" (cliquez sur le bouton radio). C'est la première étape.

Ensuite, dans les cellules pouvant aboutir à un résultat que vous ne voulez pas tracer, insérez la formule dans une instruction IF avec un résultat NA() tel que =IF($A8>TODAY(),NA(), *formula to be plotted*)

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

Pour nettoyer cela, sélectionnez la cellule pouvant 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 le format, sélectionnez font - color - white (ou quelle que soit la couleur de votre fond). Cliquez sur les différents boutons pour sortir et vous devriez voir que les cellules contenant des données non valides sont vides (elles contiennent en fait #N/A mais le texte blanc sur fond blanc a l'air vide.) Ensuite, le graphique lié n'affiche pas non plus les points de valeur non valides. .

20
Gentle Knight

Voici comment je l'ai fait pour l'ensemble de données que j'utilisais. Cela semble compliqué et stupide, mais c’était la seule alternative pour apprendre à utiliser la solution VB mentionnée ci-dessus.

  1. J'ai fait une "copie" de toutes les données et les ai collées en tant que "valeurs".
  2. Ensuite, j'ai mis en évidence les données collées et fait un "remplacement" (Ctrl-H) les cellules vides avec une lettre, j’ai choisi q car ce n’était nulle part sur ma fiche technique.
  3. Enfin, j'ai fait un autre "remplacer" 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é - je devais remplacer le cellule vide avec une sorte de texte, puis remplacez ce texte par une cellule vide.

10
jeramy

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

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

  • définissez le format des nombres pour les cellules comme suit, 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 pour quoi le paramètre de texte était utilisé, mais cela semblait être nécessaire).

    0;0;"";"text"@
    
9
ET-X

Essayez d'évaluer la cellule en utilisant LEN. S'il contient une formule, LEN renverra 0. S'il contient du texte, il retournera plus que 0.

7
Dan Lock

Wow, un nombre incroyable de personnes ont mal interprété la question. Il est facile de faire une cellule look 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 uniquement 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 fonction de recherche et remplacement ou d'un script VBA. Bien que vous puissiez utiliser un espace ou un "", je vous conseillerais d'utiliser une valeur évidente, telle que "NODATE", "NONUMBER" ou "XXXXX" afin que vous puissiez facilement voir où cela se produit - c'est assez difficile à trouver "" dans un tableur.

7
Laird Popkin

Utilisez COUNTBLANK(B1)>0 au lieu de ISBLANK(B1) dans votre instruction IF.

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

6

Autant de réponses qui retournent une valeur qui LOOKS est vide mais qui n'est pas réellement une cellule vide comme demandé ...

Comme demandé, si vous voulez réellement une formule qui retourne une cellule vide. C'est IS possible via VBA. Donc, voici le code pour faire exactement cela. Commencez par écrire une formule pour renvoyer l'erreur # N/A à l'endroit où vous souhaitez que les cellules soient vides. Ensuite, ma solution efface automatiquement toutes les cellules contenant cette erreur # N/A. Bien sûr, vous pouvez modifier le code pour supprimer automatiquement le contenu des cellules en fonction de vos préférences.

Ouvrez le "visual basic visualer" (Alt + F11). Recherchez le classeur d’intérêt dans l’explorateur de projet et double-cliquez dessus (ou cliquez avec le bouton droit de la souris et sélectionnez Afficher le code). Cela ouvrira la fenêtre "Afficher le code". Sélectionnez "Classeur" dans le menu déroulant (Général) et "Feuille de calcul" dans le menu déroulant (Déclarations).

Collez le code suivant (basé sur la réponse de J.T. 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 activé par macro

NB: Ce processus est comme un scalpel. Il supprimera tout le contenu de toutes les cellules dont le résultat est l'erreur # N/A. Ils iront et vous ne pourrez pas les récupérer sans entrer à nouveau dans la formule qu’ils contenaient.

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

6
Mr Purple

Cette réponse ne traite pas entièrement du PO, mais plusieurs fois, j'ai eu un problème similaire et recherché la réponse.

Si vous pouvez recréer la formule ou les données si nécessaire (et d'après votre description, il semble que vous puissiez le faire), puis, lorsque vous êtes prêt à exécuter la partie qui nécessite que les cellules vides soient réellement empty , vous pouvez alors sélectionner la région et exécuter 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

4
ElderDelp

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 if imbriquée pour renvoyer 0 istead de "", puis si le résultat est 0, cette équation renverra ""

=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 ...

2
Big Z

Jusqu'à présent, c'est le meilleur que je pourrais trouver.

Il utilise la fonction ISBLANK pour vérifier si la cellule est vraiment vide dans une instruction IF. S'il y a quelque chose dans la cellule, A1 dans cet exemple, même un caractère ESPACE, la cellule n'est pas EMPTY 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 EMPTY, la cellule de calcul n'affichera pas les erreurs de calcul.Si la cellule est NOT EMPTY, les résultats du calcul seront affichés. Cela provoquera 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.

1
Stevis Geekus

Si vous utilisez des fonctions de recherche telles que HLOOKUP et VLOOKUP pour importer les données dans votre feuille de calcul, placez-la entre crochets et cette 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.

Modifier

Pour obtenir un IF (A1 = "",) comme vrai, il faut que deux recherches soient effectuées 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.

1
Matthew Dolman

La réponse est positive - vous ne pouvez pas utiliser la fonction = IF () et laisser la cellule vide. "A l'air 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.

0
Ken

Ce que j'ai utilisé était un petit bidouillage. J'ai utilisé T (1), qui a renvoyé une cellule vide. T est une fonction dans Excel qui renvoie son argument s'il s'agit d'une chaîne et d'une cellule vide dans le cas contraire. Alors, ce que vous pouvez faire c'est:

=IF(condition,T(1),value)
0
Ahmed Shahid