Quelqu'un connaît-il la formule pour trouver la valeur de la dernière cellule non vide d'une colonne, dans Microsoft Excel?
excel
worksheet-function
MichaelS
la source
la source
Réponses:
Cela fonctionne à la fois avec du texte et des nombres et ne se soucie pas s'il y a des cellules vides, c'est-à-dire qu'il renverra la dernière cellule non vide.
Il doit être entré dans un tableau , ce qui signifie que vous appuyez sur Ctrl-Maj-Entrée après l'avoir tapé ou collé. Ce qui suit est pour la colonne A:
la source
CELL()
ouOFFSET()
), alors que la plus votée renvoie une valeur sans vous dire où elle se trouve.L'utilisation de la formule simple suivante est beaucoup plus rapide
Pour Excel 2003:
Il vous offre les avantages suivants:
Explication:
(A:A<>"")
renvoie le tableau{TRUE,TRUE,..,FALSE,..}
1/(A:A<>"")
modifie ce tableau en{1,1,..,#DIV/0!,..}
.LOOKUP
s'attend à un tableau trié dans l' ordre croissant , et en tenant compte du fait que si laLOOKUP
fonction ne peut pas trouver une correspondance exacte, elle choisit la plus grande valeur danslookup_range
(dans notre cas{1,1,..,#DIV/0!,..}
) qui est inférieure ou égale à la valeur (dans notre cas2
), La formule trouve le dernier1
dans le tableau et renvoie la valeur correspondante deresult_range
(troisième paramètre -A:A
).Petite remarque également - la formule ci-dessus ne prend pas en compte les cellules avec des erreurs (vous ne pouvez la voir que si la dernière cellule non vide contient une erreur). Si vous souhaitez les prendre en compte, utilisez:
l'image ci-dessous montre la différence:
la source
LOOKUP
dit que le dernier argumentresult_vector
est facultatif. Cependant si je l'omets, j'obtiens un résultat très étrange que je ne comprends pas.LOOKUP
fonction ne trouve pas lelookup_value
, la fonction correspond à la plus grande valeurlookup_vector
qui est inférieure ou égale àlookup_value.
" Si j'utilise=LOOKUP(2,A:A<>"",A:A)
sans générer l'#DIV/0!
erreur par1/...
, il semble qu'elle renvoie une valeur au milieu de le vecteur. Je n'ai pas trouvé quelle est la fonctionnalité exacte dans ce cas.=LOOKUP(2,1/(A:A<>""),ROW(A:A))
mais l'ajout d'uneROW
fonction ajoutera un effet de «volatilité» - la formule sera recalculée à chaque fois qu'une cellule de la feuille de travail sera modifiéeVoici une autre option:
=OFFSET($A$1;COUNTA(A:A)-1;0)
la source
COUNTA
place deCOUNT
). Sans parler des cellules vides.Inspiré par l'excellente piste donnée par la réponse de Doug Glancy, j'ai trouvé un moyen de faire la même chose sans avoir besoin d'une formule matricielle. Ne me demandez pas pourquoi, mais je tiens à éviter si possible l'utilisation de formules matricielles (pas pour une raison particulière, c'est juste mon style).
C'est ici:
Pour rechercher la dernière ligne non vide en utilisant la colonne A comme colonne de référence
Pour rechercher la dernière colonne non vide en utilisant la ligne 1 comme ligne de référence
Cela peut être utilisé en outre en conjonction avec la fonction d'index pour définir efficacement des plages nommées dynamiques, mais c'est quelque chose pour un autre article car cela n'est pas lié à la question immédiate abordée ici.
J'ai testé les méthodes ci-dessus avec Excel 2010, à la fois "nativement" et en "mode de compatibilité" (pour les anciennes versions d'Excel) et elles fonctionnent. Encore une fois, avec ceux-ci, vous n'avez pas besoin de faire l'un des Ctrl + Maj + Entrée. En tirant parti du fonctionnement de sumproduct dans Excel, nous pouvons maîtriser la nécessité d'effectuer des opérations de tableau, mais nous le faisons sans formule matricielle. J'espère que quelqu'un pourra apprécier autant que moi la beauté, la simplicité et l'élégance de ces solutions sumproduct proposées. Je n'atteste cependant pas l'efficacité de la mémoire des solutions ci-dessus. Juste qu'ils sont simples, beaux, contribuent à l'objectif visé et sont suffisamment flexibles pour étendre leur utilisation à d'autres fins :)
J'espère que cela t'aides!
Bonne chance!
la source
Je sais que cette question est ancienne, mais je ne suis pas satisfait des réponses fournies.
LOOKUP, VLOOKUP et HLOOKUP ont des problèmes de performances et ne devraient vraiment jamais être utilisés.
Les fonctions de baie ont beaucoup de surcharge et peuvent également avoir des problèmes de performances, elles ne doivent donc être utilisées qu'en dernier recours.
COUNT et COUNTA rencontrent des problèmes si les données ne sont pas contiguës non vides, c'est-à-dire que vous avez des espaces vides, puis des données à nouveau dans la plage en question
INDIRECT est volatil, il ne doit donc être utilisé qu'en dernier recours
OFFSET est volatil, il ne doit donc être utilisé qu'en dernier recours
toute référence à la dernière ligne ou colonne possible (la 65536e ligne dans Excel 2003, par exemple) n'est pas robuste et entraîne une surcharge supplémentaire
C'est ce que j'utilise
lorsque le type de données est mixte:
=max(MATCH(1E+306,[RANGE],1),MATCH("*",[RANGE],-1))
quand on sait que les données ne contiennent que des nombres:
=MATCH(1E+306,[RANGE],1)
quand on sait que les données ne contiennent que du texte:
=MATCH("*",[RANGE],-1)
MATCH a la plus faible surcharge et est non volatile, donc si vous travaillez avec beaucoup de données, c'est le meilleur à utiliser.
la source
TRUE
/FALSE
), elles ne seront pas détectées. Malgré le fait que cette réponse ne soit pas à toute épreuve, je pense toujours que cette réponse a le moins d'impact sur les performances.=INDEX(N:N,MATCH(1E+306,N:N,1))
Cela fonctionne dans Excel 2003 (et plus tard avec des modifications mineures, voir ci-dessous). Appuyez sur Ctrl + Maj + Entrée (pas seulement Entrée) pour entrer cela sous forme de formule matricielle.
Sachez qu'Excel 2003 ne peut pas appliquer une formule matricielle à une colonne entière. Faire ainsi cède
#NUM!
; des résultats imprévisibles peuvent survenir! (MODIFIER : informations contradictoires de Microsoft: la même chose peut être vraie ou non à propos d'Excel 2007; le problème a peut- être été résolu en 2010. )C'est pourquoi j'applique la formule matricielle à la plage
A1:A65535
et donne un traitement spécial à la dernière cellule, qui se trouveA65536
dans Excel 2003. Je ne peux pas simplement direA:A
ou mêmeA1:A65536
lorsque cette dernière revient automatiquementA:A
.Si vous êtes absolument sûr que le champ
A65536
est vide, vous pouvez ignorer laIF
partie:Notez que si vous utilisez Excel 2007 ou 2010, le dernier numéro de ligne est 1048576 et non 65536, donc ajustez ce qui précède le cas échéant.
S'il n'y a pas de cellules vides au milieu de vos données, alors je voudrais simplement utiliser la formule plus simple,
=INDEX(A:A,COUNTA(A:A))
.la source
=INDEX(19:19,COUNTA(19:19))
Une solution alternative sans formules matricielles, peut-être plus robuste que celle d' une réponse précédente avec une (allusion à une) solution sans formules matricielles , est
Voyez cette réponse à titre d'exemple. Félicitations à Brad et Barry Houdini , qui ont aidé à résoudre cette question .
Les raisons possibles pour préférer une formule non matricielle sont données dans:
Une page officielle de Microsoft (recherchez "Inconvénients de l'utilisation de formules matricielles").
Les formules matricielles peuvent sembler magiques, mais elles présentent également certains inconvénients:
Array Formula Heresy .
la source
A
occurrences par unD
. Qu'est-ce que je fais mal?si vous recherchez dans la colonne (A), utilisez:
si votre plage est A1: A10, vous pouvez utiliser:
dans cette formule:
renvoie le dernier numéro de ligne non vide et indirect () renvoie la valeur de la cellule.
la source
=INDEX(A:A, COUNTA(A:A), 1)
pris d' icila source
=MATCH("*";A1:A10;-1)
pour les données textuelles=MATCH(0;A1:A10;-1)
pour les données numériquesla source
J'ai essayé toutes les versions non volatiles mais aucune version donnée ci-dessus n'a fonctionné .. excel 2003/2007update. Cela peut certainement être fait dans Excel 2003. Pas sous forme de tableau ni de formule standard. Soit j'obtiens juste une erreur vide, 0 ou #value. J'ai donc recours aux méthodes volatiles .. Cela a fonctionné.
@Julian Kroné .. Utilisation de ";" au lieu de "," ne fonctionne PAS! Je pense que vous utilisez Libre Office et non MS Excel? LOOKUP est tellement volitile que je ne l'utilise qu'en dernier recours
la source
Placez ce code dans un module VBA. Sauver. Sous Fonctions, Recherche définie par l'utilisateur pour Cette fonction.
la source
pour les données textuelles:
pour les données numériques:
Cela vous donne l'indice relatif de la dernière cellule non vide de la plage sélectionnée (ici A1: A10).
Si vous voulez obtenir la valeur, accédez-y via INDIRECT après avoir construit -textuellement- la référence de cellule absolue, par exemple:
la source
J'ai eu le même problème aussi. Cette formule fonctionne également bien: -
14 étant le numéro de ligne de la première ligne des lignes à compter.
Griffe chronique
la source
J'ai utilisé HLOOKUP
A1
a une date;A2:A8
a des prévisions capturées à des moments différents, je veux les dernièresCela utilise une formule hlookup standard avec le tableau de recherche défini par le nombre d'entrées.
la source
Si vous savez qu'il n'y aura pas de cellules vides entre les deux, le moyen le plus rapide est celui-ci.
Il compte simplement les cellules non vides et fait référence à la cellule appropriée.
Il peut également être utilisé pour une gamme spécifique.
Cela renvoie la dernière cellule non vide dans la plage O4: O34.
la source
Pour Microsoft Office 2013
"Last but one" d'une ligne non vide:
"Dernière" ligne non vide:
la source
Cette formule a fonctionné avec moi pour le bureau 2010:
= RECHERCHE (2; 1 / (A1: A100 <> ""); A1: A100)
A1: la première cellule A100: se référer à la dernière cellule en comparant
la source
Je pense que la réponse de W5ALIVE est la plus proche de ce que j'utilise pour trouver la dernière ligne de données dans une colonne. En supposant que je recherche la dernière ligne avec des données dans la colonne A, j'utiliserais ce qui suit pour la recherche plus générique:
Le premier MATCH trouvera la dernière cellule de texte et le second MATCH trouvera la dernière cellule numérique. La fonction IFERROR renvoie zéro si le premier MATCH trouve toutes les cellules numériques ou si la seconde correspondance trouve toutes les cellules de texte.
Fondamentalement, il s'agit d'une légère variation de la solution mixte de texte et de nombre de W5ALIVE.
Lors du test du timing, cela a été significativement plus rapide que les variantes LOOKUP équivalentes.
Pour renvoyer la valeur réelle de cette dernière cellule, je préfère utiliser le référencement de cellule indirect comme ceci:
La méthode proposée par sancho.s est peut-être une option plus propre, mais je modifierais la partie qui trouve le numéro de ligne comme suit:
la seule différence étant que le ", 1" renvoie la première valeur tandis que le ", 0" renvoie le tableau entier de valeurs (dont toutes sauf une ne sont pas nécessaires). J'ai toujours tendance à préférer adresser la cellule à la fonction d'index là-bas, en d'autres termes, renvoyer la valeur de la cellule avec:
Super fil!
la source
Si vous n'avez pas peur d'utiliser des tableaux, voici une formule très simple pour résoudre le problème:
= SOMME (SI (A: A <> "", 1,0))
Vous devez appuyer sur CTRL + MAJ + ENTRÉE car il s'agit d'une formule matricielle.
la source
Un simple qui fonctionne pour moi:
la source
D'accord, j'ai donc eu le même problème que le demandeur et j'ai essayé les deux principales réponses. Mais seulement obtenir des erreurs de formule. Il s'est avéré que j'avais besoin d'échanger le "," contre ";" pour que les formules fonctionnent. J'utilise XL 2007.
Exemple:
ou
la source
Pour le suivi de version (en ajoutant la lettre v au début du numéro), j'ai trouvé que celui-ci fonctionnait bien dans Xcelsius (SAP Dashboards)
la source