web-dev-qa-db-fra.com

Avoir des formules Excel qui retournent 0, rendre le résultat vide

Un problème récurrent d’Excel que j’ai est celui de formules telles que INDEX(array,row,column) qui retournent 0 quand il n’ya aucun résultat, plutôt que de retourner en blanc.

Quel est le meilleur moyen de changer le résultat zéro en blanc?

Voici les approches que j'ai essayées jusqu'à présent:

1) Utilisation de la division par zéro. Si INDEX renvoie 0, je provoque une erreur que je filtre ensuite.

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

CONS: rend la formule plus compliquée et cache les erreurs que vous voudrez peut-être voir.

2) Utiliser un formatage personnalisé

0;-0;;@

LES INCONVÉNIENTS:
1) ne peut pas appliquer simultanément le format de date
2) Cela ne fonctionne pas avec la mise en forme conditionnelle lorsqu'il s'agit de vérifier les cellules vides (il y a toujours la valeur zéro, elle n'est tout simplement pas affichée)

3) Utilisation des instructions IF

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

CONS: Répétition malpropre

Quelqu'un a-t-il d'autres idées/meilleures idées?

11
WoodenKitty

Vous pouvez créer vos propres fonctions définies par l'utilisateur dans un module dans Excel, telles que (de la mémoire, un débogage peut donc être nécessaire, et la syntaxe peut varier selon Excel. versions également):

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

Vous pouvez ensuite simplement insérer =ZeroToBlank (Index (a,b,c)) dans votre cellule.

Il y a un bon tutoriel sur ce sujet ici .

Les étapes de base sont les suivantes:

  • Ouvrez l'éditeur VB dans Excel à l'aide de Tools -> Macro -> Visual Basic Editor.
  • Créez un nouveau module avec Insert -> Module.
  • Entrez la fonction ci-dessus dans ce module.
  • Dans les cellules où vous souhaitez appeler cette fonction, entrez la formule
    =ZeroToBlank (<<whatever>>)
    <<whatever>> est la valeur pour laquelle vous souhaitez utiliser un blanc, s'il est égal à zéro.
  • Notez que cette fonction renvoie une chaîne. Par conséquent, si vous souhaitez ressembler à un nombre, vous pouvez justifier les cellules à droite.

Notez qu'il peut y avoir des variations mineures selon la version d'Excel dont vous disposez. Ma version d'Excel est 2002, certes assez ancienne, mais elle en fait tout ce dont j'ai besoin.

9
paxdiablo

La méthode normale serait l'instruction IF, bien que plus simple que votre exemple:

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

Nul besoin de faire des gyrations avec la formule, car les valeurs nulles déclenchent la condition fausse.

6
Lance Roberts

Je ne suis pas sûr que cela fonctionne avec tous les types de données, mais la seule solution que j'ai trouvée pour le moment est de vérifier si l'index est vide:

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

La formule

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

ne fonctionne pas avec le texte

4
Gutti

Si vous souhaitez faire disparaître tous les zéros de la feuille de calcul, accédez à la section «Options Excel», à la page «Avancée», à la section «Options d'affichage pour cette feuille de calcul» et décochez la case «Afficher un zéro dans les cellules dont la valeur est zéro». ”Case à cocher. (Ceci est la navigation pour Excel 2007; YMMV.)

En ce qui concerne votre réponse (2), vous pouvez enregistrer quelques frappes au clavier en tapant 0;-0; –– autant que je sache, cela équivaut à 0;-0;;@. Inversement, si vous voulez être un peu plus général, vous pouvez utiliser le format General;-General;. Non, cela ne gère pas automatiquement les dates, mais, comme le souligne Barry, si vous êtes en attente une valeur de date, vous pouvez utiliser un format comme d-mmm-yyyy;;.

2
Scott

Il existe une réponse très simple à ce problème complexe - la fonction SUBSTITUTE. Dans votre exemple ci-dessus:

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

Peut être réécrit comme suit:

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

Cela a fonctionné pour moi

1
yohan.jayarathna

La question peut être: pourquoi voudriez-vous qu’il agisse différemment de la façon dont il le fait actuellement? Hormis l'écriture de votre propre fonction d'enveloppement ou d'une fonction alternative dans VBA (ce qui entraînera probablement une réduction de la vitesse de calcul des fichiers volumineux), il pourrait ne pas y avoir de solution unique à vos différents problèmes.

Toute formule de suivi échouerait très probablement sur un blanc, ce qui provoquerait une erreur que vous captureriez avec IFERROR() ou que vous éviteriez avec IF(sourcecell<>"";...). Si vous utilisiez ce dernier, le test du zéro équivaut exactement. La vérification des cellules vides devient la vérification de 0 cellules valorisées. (Si cela vous convient, veuillez expliquer plus précisément le problème).

Pour des raisons esthétiques, la solution de formatage personnalisé conviendrait parfaitement.

Pour les graphiques, il pourrait y avoir un problème qui pourrait être résolu en l’appliquant effectivement dans la formule originale.

1
K_B

Je l'ai compris en concaténant une chaîne EMPTY

INDEX(tt_Attributes,MATCH([RowID],tt_Attributes[RowID],0),COLUMN(tt_Attributes[Long Description]) ) & ""
1
Jiping Wang

Aucune de ce qui précède n'a fonctionné pour moi aujourd'hui, alors j'ai essayé de mettre le 0 entre guillemets, comme indiqué dans l'exemple ci-dessous.

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

0
John Little

Il suffit d'ajouter une chaîne vide à la fin. Il oblige Excel à le voir tel qu'il est.

Par exemple:

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

Utilisez la mise en forme conditionnelle (onglet Accueil, section styles) et appliquez la règle des cellules de surbrillance (en plaçant 0 dans la case Formater les cellules qui sont égales à), mais sélectionnez le format personnalisé, puis l'onglet Nombre. Sélectionnez Catégorie personnalisée et dans la zone de saisie:

0; -0 ;; @

Cela semble compliqué mais est en réalité simple.

Cela donne l'avantage que la cellule a l'air vide mais que 0 est toujours la valeur sous-jacente. Par conséquent, toutes les formules que vous utilisez contre cette cellule/sélection le verront toujours comme numérique et économisera beaucoup de problèmes avec les instructions IF chaînées.

0
travel_kat