web-dev-qa-db-fra.com

Formule Excel: Compter les cellules dont la valeur est la date

Je cherche une formule pour exécuter un COUNTIF (ou similaire) sur une plage de cellules, et où la valeur contenue est une date, pour incrémenter le compteur - essentiellement quelque chose comme:

=COUNTIF(range, if_date())

Ce que je n'ai pas pu trouver, c'est un test logique pour la partie if_date () de la question. Existe-t-il un moyen de tester une cellule pour vérifier si son contenu est une date?

2
jvc26

Cela est difficile avec les fonctions de feuille de calcul, car les dates dans Excel sont simplement des nombres mis en forme. Seule la fonction CELL vous permet d’examiner le format d’une cellule (vous ne pouvez pas l’appliquer à une plage. Une colonne d’aide serait donc nécessaire) .... ... ou, si vous avez seulement des dates et des blancs ... ou des dates et du texte, il suffit alors d'utiliser la fonction COUNT, c'est-à-dire.

=COUNT(range)

Cela compte les nombres donc ce ne sera pas suffisant si vous voulez distinguer les dates des nombres. Si vous le faites, la plage de numéros peut être utilisée, par ex. si vous avez des nombres dans une plage et des dates mais que les nombres seront tous inférieurs à 10 000 et que les dates seront toutes relativement récentes, vous pouvez utiliser cette version pour exclure les nombres.

=COUNTIF(range,">10000")

5
barry houdini

Voici ma solution. Si vos cellules ne contiennent que des dates ou des blancs, comparez-les simplement à une autre date. Si la cellule peut être convertie en date, elle sera comptée.

=COUNTIF(C:C,">1/1/1900")
## Counts all the dates in column C

Attention, les cellules avec des nombres seront comptées. 

2
Paul Stephens

Voici une approche. En combinant les réponses ci-dessus, procédez comme suit: 

  1. Convertir une cellule en texte en utilisant un format prédéfini
  2. Essayez d'utiliser DATEVALUE pour le reconvertir en date
  3. Exclure toutes les cellules où DATEVALUE renvoie une erreur

Comme formule, utilisez simplement l'exemple ci-dessous avec <> remplacé par votre référence de plage.

=SUM(IF(ISERROR(DATEVALUE(TEXT(<<RANGE HERE>>, "MM/dd/yyyy"))), 0, 1))

Vous devez entrer ceci sous forme de formule matricielle avec CTRL + SHIFT + ENTER.

2
user1600453

Pour compter les nombres ou les dates correspondant à un seul test (par exemple, égal à, supérieur à, inférieur à, supérieur ou égal à, ou inférieur ou égal à), utilisez la fonction COUNTIF. Dans Excel 2007 et les versions ultérieures, vous pouvez utiliser la fonction COUNTIFS pour compter les nombres ou les dates compris dans une plage (par exemple, supérieure à 9 000 et inférieure à 22500). Si vous utilisez Excel 2003 ou une version antérieure, vous pouvez utiliser la fonction SOMMEPROD pour compter les nombres compris dans une plage (COUNTIFS a été introduit dans Excel 2007).

s'il vous plaît voir plus

0
user1193035

Voici comment j’ai pu tromper Excel pour compter les certifications expirées dans une liste. Je n'avais pas de date fixe, ni de plage de dates, juste la date du jour. "TODAY ()" ne fonctionne pas dans ces versions pour Excel 2013. Il le voit comme du texte ou une condition, pas comme la date. Donc, ces précédents n'ont pas fonctionné pour moi. Donc, le problème/scénario de Word: combien de personnes ont expiré dans cette liste?

Utilisez: = IFERROR (D5-TODAY (), 0) Où D5 est la date à interroger. 

Ensuite, utilisez: = IF (J5> = 1,1,0) Où J5 est la cellule où la première équation produit un nombre positif ou négatif. Cet ensemble, je me suis caché sur le côté de la feuille visible, puis je résume simplement le total pour le nombre de membres non expirés.

0
Firefly

Nombre total de cellules dans une plage moins les cellules vides de la même plage.

= (115 - (COUNTBLANK (C2: C116)))

Cela compte tout dans la gamme, alors peut-être pas ce que vous recherchez.

0
Luke Cogburn

Il n’existe pas de solution interactive dans Excel car certaines fonctions ne sont pas vectorielles, commeCELL, cité plus haut. Par exemple, il est possible de compter tous les nombres dont la valeur absolue est inférieure à 3, carABSest accepté dans un tableau de formule.

J'ai donc utilisé la formule suivante ( Ctrl + Maj + Entrée après édition sans accolades)

             ={SUM(IF(ABS(F1:F15)<3,1,0))}

Si Colonne F a

                   F
          1 ...    2
          2 ....   4
          3 ....  -2
          4 ....   1
          5 .....  5

Il en compte 3! (-2,2 et 1). Pour montrer comment ABS fonctionne avec les tableaux, faisons un test simple: Sélectionnez G1: G5 , chiffre = ABS (F1: F5) dans la barre de formule et appuyez sur Ctrl + Maj + Entrée . C'est comme si quelqu'un écrivait Abs (F1: F5) (1), Abs (F1: F5) (2) , etc.

                   F    G
          1 ...    2  =ABS(F1:F5) => 2 
          2 ....   4  =ABS(F1:F5) => 4
          3 ....  -2  =ABS(F1:F5) => 2
          4 ....   1  =ABS(F1:F5) => 1
          5 .....  5  =ABS(F1:F5) => 5

Maintenant, je mets des données mélangées, y compris 2 valeurs de date.

                   F
          1 ...    Fab-25-2012
          2 ....   4
          3 ....   May-5-2013
          4 ....   Ball
          5 .....  5

Dans ce cas,CELLULEéchoue et renvoie 1

             ={SUM(IF(CELL("format",F1:F15)="D4",1,0))}

Cela se produit parce queCELLrenvoie le format de la première cellule de la plage. ( D4 est un format m-d-y)

Il ne reste donc que la programmation! Une UDF (fonction définie par l'utilisateur) pour tableau de formule doit renvoyer un tableau de variants:

Function TypeCell(R As Range) As Variant
Dim V() As Variant
Dim Cel As Range
Dim I As Integer
Application.Volatile '// For revaluation in interactive environment
ReDim V(R.Cells.Count - 1) As Variant
I = 0
For Each Cel In R
   V(I) = VarType(Cel) '// Output array has the same size of input range.
   I = I + 1
Next Cel
TypeCell = V
End Function

Maintenant, c'est facile (la constante VbDate vaut 7):

             =SUM(IF(TypeCell(F1:F5)=7,1,0))  

Cela montre 2. Cette technique peut être utilisée pour n'importe quelle forme de cellules. J'ai testé les formes verticales, horizontales et rectangulaires, puisque vous remplissez avec pour chaque ordre dans la fonction.

0
Paulo Buchsbaum

Un peu long mais ça marche pour moi: essayez ceci :: 

=SUM(IF(OR(ISBLANK(AU2), NOT(ISERR(YEAR(AU2)))),0,1)
 +IF(OR(ISBLANK(AV2), NOT(ISERR(YEAR(AV2)))),0,1))

la première partie de si permet à la cellule d'être vide ou s'il y a quelque chose dans la cellule qu'elle tente de convertir en année, s'il y a une erreur ou s'il y a autre chose qu'un résultat de date = 1, faites la même chose pour chaque cellule et résumer le résultat

0
Bill Hannigan

Cela suppose que la colonne des valeurs de date potentielles se trouve dans la colonne A. Vous pouvez faire quelque chose comme ceci dans une colonne adjacente: 

Créez une formule imbriquée qui convertit la "date" en valeur numérique si elle est valide ou une valeur d'erreur égale à zéro si ce n'est pas le cas.
Ensuite, les valeurs numériques valides sont converties en 1 et les zéros sont laissés tels quels.
Ajoutez ensuite la nouvelle colonne pour obtenir le nombre total de dates valides.

= IF (IFERROR (DATEVALUE (A1), 0)> 0,1,0)

0
glthornberry