Comment savoir si une cellule Excel a une formule ou est codée en dur?

17

Quelqu'un at-il une astuce spéciale (non-VBA fortement préférée) pour dire systématiquement si une cellule a une valeur codée en dur ou est une formule dérivée?

J'ai affaire à des données contenant des sous-totaux désordonnés et j'essaie de voir si je peux séparer les lignes brutes.

YGA
la source
Le mode "Afficher les formules" (Ctrl + `) aide-t-il?
sblair
C'est le cas, mais je ne le considérerais pas comme "systématique" - m'oblige à faire sauter les lignes du sous-total.
YGA

Réponses:

8

Utilisez la mise en forme conditionnelle. Choisissez l'option «Utiliser une formule pour déterminer les cellules à formater» et tapez «= PAS (Cellhasformula)». Cela formatera tout ce qui est codé en dur.

Stephen
la source
8
Ce n'était donc pas la réponse complète, mais c'est en fait assez élégant. La réponse complète est sur: j-walk.com/ss/excel/usertips/tip045.htm La clé est que vous devez d'abord créer un nom (via Formules -> Gestionnaire de noms) appelé "Cellhasformula" qui "se réfère à" la formule mystique = GET.CELL (48, INDIRECT ("rc", FALSE)). Comme le dit le lien, la formule utilise GET.CELL, qui est dans le langage macro XLM (le prédécesseur de VBA) et ne peut pas être utilisée directement dans une feuille de calcul. L'argument "48" fait que GET.CELL retourne 'True' si la cellule a une formule. L'INDIRECT crée fondamentalement une référence à chaque cellule de la plage sélectionnée.
YGA
J'ai modifié la réponse pour inclure ces détails. Merci @YGA
Alain
15

Sélectionnez les cellules en question, appuyez sur Ctrl+ G, puis sélectionnez Specialpour obtenir la boîte de dialogue suivante:

Aller à la boîte de dialogue spéciale

Spécifiez ensuite le type de cellules souhaité et cliquez sur OKet seuls ces types de cellules resteront sélectionnés.

Mike Fitzpatrick
la source
8

Depuis Excel 2013, vous pouvez faire:

=ISFORMULA(reference)

Voici la documentation complète

David K.
la source
3
=iferror(Formulatext(cell),"Not Formula")

ou pour n'afficher que les formules:

=iferror(Formulatext(cell),"")
Jack
la source
Pour toute personne utilisant LibreOffice Calc au lieu d'Excel, remplacez formulatext () par la formule ().
fixer1234
2

Deux autres méthodes consistent à

  1. Utilisez un outil de cartographie tel que mon Mappit! complément (qui peut être exécuté en tant que complément de confiance)
  2. Vous pouvez utiliser la solution de contournement très utile XLM / Range Names qui offre une coloration en temps réel des cellules codées en dur, des formules, des cellules liées, etc. Cela ne nécessite aucune connaissance en programmation pour se déployer contrairement à VBA
brettdj
la source
1

Je sais que vous avez dit non-VBA préféré, mais si vous vous retrouvez sans autre solution, l'objet Range a une propriété HasFormula.

Renvoie: True si toutes les cellules de la plage contiennent des formules; False si aucune des cellules de la plage ne contient de formule; null sinon.

Source: http://msdn.microsoft.com/en-us/library/bb208626%28v=office.12%29.aspx

Patrick Seymour
la source
1

Si vous souhaitez stocker le fichier Excel dans un format de classeur sans macro, vous devez éviter à la fois VBA et les macros (c'est-à-dire les approches XL4 / XLM suggérées dans d'autres réponses). Dans cette réponse, j'ai fait l'hypothèse d'un fichier Excel sans macro.

Si vous utilisez MS-Excel 2013, vous pouvez utiliser:

=ISFORMULA(reference)

Si vous utilisez des versions MS-Excel plus anciennes (par exemple 2010, 2007), il n'y a pas de véritable fonction pour déterminer si une cellule contient une formule. Cependant, vous pouvez l'approcher en utilisant:

=IF(OR(ISBLANK(reference);CELL("prefix";reference)<>"");FALSE;IF(CELL("type";reference)="l";TRUE;"MAYBE"))

La fonction ci-dessus renvoie:

  • VRAI pour les cellules contenant une formule qui se traduit par des données de chaîne.
  • FALSE pour les cellules contenant un littéral String ou est vide.
  • "PEUT-ÊTRE" pour les cellules contenant un booléen, un nombre ou une date, que cette valeur soit littérale ou le résultat d'une formule.
Julien Kronegg
la source
1

Bien au-delà de la date d'origine, mais si cela peut être utile à n'importe qui, j'ai réussi à contourner cela en sélectionnant la plage de cellules, puis en utilisant Remplacer (Ctrl + H), en la réglant sur "Rechercher dans" "Formules" et en remplaçant un égal =avec une apostrophe égale'=

Cela a fait sortir toutes les formules, mais serait évidemment aussi convertir des choses comme si 1 $ C contenu =if($A1=$B1,"Match","Different")à'=if($A1'=$B1,"Match","Different")

Remarquez le A1'=B1milieu de la formule qui peut être problématique, mais signifie toujours que vous pouvez voir les formules, bien que de manière non pragmatique. Pourrait utiliser la fonction SUBSTITUTE pour le modifier à nouveau, donc $ D $ 1 contient =SUBSTITUTE(C1,"'=","="), puis copiez-le dans le Bloc-notes et collez-le dans $ E $ 1

L'autre façon serait de «montrer les formules» mais cela montrerait les formules pour chaque cellule, pas seulement une plage sélectionnée.

Aubs
la source
1
Function is_formula(c As Range) As Boolean
  is_formula = Left(c.Formula, 1) = "="
End Function
George Skelton
la source
Pouvez-vous ajouter une brève explication pour nous dire ce qui se passe ici? :)
bertieb
Il suffit de le coller dans un module VBA, bien que je réalise maintenant que l'OP ne voulait pas de VBA. Mais de toute façon, c'est pourquoi j'utilise.
George Skelton
Ce n'est pas vraiment une explication
bertieb