Dernière case non vide dans une colonne

personne Ne sait la formule pour trouver la valeur de la dernière cellule non vide dans une colonne, dans Microsoft Excel?

96
demandé sur Jean-François Corbett 2011-03-26 14:05:40

23 réponses

cela fonctionne avec le texte et les nombres et ne se soucie pas s'il y a des cellules vides, c.-à-d., il retournera la dernière cellule non vide.

il doit être array-entrée , ce qui signifie que vous appuyez sur Ctrl-Shft-Entrée après vous le Dactylographiez ou le collez. Le texte ci-dessous est destiné à la colonne A:

=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A))))
65
répondu Doug Glancy 2016-12-06 11:15:31

utilisant la formule simple suivante est beaucoup plus rapide

=LOOKUP(2,1/(A:A<>""),A:A)

Pour Excel 2003:

=LOOKUP(2,1/(A1:A65535<>""),A1:A65535)

il vous donne les avantages suivants:

  • il est pas de tableau formule
  • c'est pas volatile formule

Explication:

  • (A:A<>"") retourne un tableau {TRUE,TRUE,..,FALSE,..}
  • 1/(A:A<>"") modifie ce tableau en {1,1,..,#DIV/0!,..} .
  • depuis LOOKUP attend trié tableau dans Ascendant ordre, et en tenant compte que si la fonction LOOKUP ne peut pas trouver une correspondance exacte, il choisit la plus grande valeur dans le lookup_range (dans notre cas {1,1,..,#DIV/0!,..} ) qui est inférieur ou égal à la valeur (dans notre cas 2 ), la formule trouve la dernière 1 dans le tableau et renvoie la valeur correspondante de result_range (troisième paramètre - A:A ).

"aussi petite note - la formule ci-dessus ne tient pas compte des cellules avec des erreurs (vous pouvez le voir seulement si la dernière cellule non vide a une erreur). Si vous voulez en tenir compte, utilisez:

=LOOKUP(2,1/(NOT(ISBLANK(A:A))),A:A)

l'image ci-dessous montre la différence:

enter image description here

115
répondu Dmitry Pavliv 2014-06-03 18:33:31

Voici une autre option: =OFFSET($A;COUNTA(A:A)-1;0)

23
répondu Patrick Honorez 2015-10-19 08:19:46

inspiré par la grande avance donnée par la réponse de Doug Glancy, j'ai trouvé un moyen de faire la même chose sans avoir besoin d'un tableau-formule. Ne me demandez pas pourquoi, mais je suis désireux d'éviter l'utilisation de la matrice de formules si possible (pas pour une raison particulière, c'est juste mon style).

le voici:

=SUMPRODUCT(MAX(($A:$A<>"")*(ROW(A:A))))

pour trouver la dernière ligne non vide en utilisant la colonne de référence

=SUMPRODUCT(MAX((:<>"")*(COLUMN(1:1))))

pour trouver la dernière colonne non vide en utilisant la ligne 1 comme ligne de référence

ceci peut être utilisé en conjonction avec la fonction d'index pour définir efficacement les plages nommées dynamiques, mais c'est quelque chose pour un autre post car ceci 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 Compatibilité " (pour les anciennes versions D'Excel) et ils fonctionnent. Encore une fois, avec ces vous n'a pas besoin de faire des combinaisons de touches Ctrl+Maj+Entrée. En tirant parti de la façon dont sumproduct fonctionne dans Excel, nous pouvons obtenir nos bras autour de la nécessité de porter des opérations-réseau, mais nous le faisons sans une formule-réseau. J'espère que quelqu'un appréciera autant que moi la beauté, la simplicité et l'élégance des solutions proposées. Je n'atteste pas de l'efficacité mémoire des solutions ci-dessus. Tout simplement qu'ils sont simples, regarder beau, aider le but visé et sont assez souple pour étendre leur utilisation à d'autres fins :)

Espérons que cette aide!

Tout le meilleur!

13
répondu Santiago 2013-10-31 23:39:43

cela fonctionne dans Excel 2003 (et plus tard avec minor edit, voir ci-dessous). Appuyez sur Ctrl+Shift+Enter (pas seulement Enter) pour entrer cette formule dans un tableau.

=IF(ISBLANK(A65536),INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535)))),A65536)

soyez conscient que Excel 2003 est incapable d'appliquer une formule de tableau à une colonne entière. Cela donne #NUM! ; des résultats imprévisibles peuvent se produire! (EDIT : information contradictoire de Microsoft: le même peut ou ne peut pas être vrai au sujet D'Excel 2007; problème mai ont été corrigés en 2010. )

C'est pourquoi j'applique la formule du tableau à la gamme A1:A65535 et donne un traitement spécial à la dernière cellule, qui est A65536 dans Excel 2003. On ne peut pas dire simplement A:A ou même A1:A65536 car ce dernier revient automatiquement à A:A .

Si vous êtes absolument sûr A65536 est vide, alors vous pouvez sauter la IF partie:

=INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535))))

notez que si vous utilisez Excel 2007 ou 2010, le numéro de la dernière ligne est 1048576 et non 65536, donc ajustez ce qui précède comme approprié.

S'il n'y a pas de cellules Vierges au milieu de vos données, alors j'utiliserais la formule plus simple, =INDEX(A:A,COUNTA(A:A)) .

10
répondu Jean-François Corbett 2011-03-27 14:01:14

je sais que cette question Est ancienne, mais je ne suis pas satisfait des réponses fournies.

  • de RECHERCHE, RECHERCHEV et HLOOKUP a des problèmes de performances et devrait vraiment jamais être utilisé.

  • les fonctions du tableau ont beaucoup de fonctions aériennes et peuvent aussi avoir des problèmes de performance, de sorte qu'il ne devrait être utilisé qu'en dernier recours.

  • les données ne sont pas contiguement non vides, c'est-à-dire que vous avez des espaces vides et des données à nouveau dans la gamme en question

  • INDIRECTE est volatile de sorte qu'il ne devrait être utilisé qu'en dernier recours

  • OFFSET est volatile de sorte qu'il ne devrait ê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 résulte en frais généraux supplémentaires

C'est ce que j'utilise

  • lorsque le type de données est mélangé: =max(MATCH(1E+306,[RANGE],1),MATCH("*",[RANGE],-1))

  • quand il est connu que les données ne contiennent que des numéros: =MATCH(1E+306,[RANGE],1)

  • quand on sait que les données ne contiennent que du texte: =MATCH("*",[RANGE],-1)

MATCH a les frais généraux les plus bas et est non-volatile, donc si vous travaillez avec beaucoup de données c'est le meilleur à utiliser.

10
répondu W5ALIVE 2016-05-12 11:58:37

une solution alternative sans formules de tableaux, peut-être plus robuste que celle de une réponse précédente avec un (indice à a) solution sans formules de tableaux , est

=INDEX(A:A,INDEX(MAX(($A:$A<>"")*(ROW(A:A))),0))

voir cette réponse à titre d'exemple. Bravo à Brad et barry houdini , qui a aidé à résoudre cette question .

Les raisons possibles pour préférer une formule sans tableau sont données dans:

  1. une page officielle de Microsoft (cherchez"inconvénients d'utiliser des formules de tableau").

    Les formules de tableaux peuvent sembler magiques, mais elles ont aussi certains inconvénients:

    • vous pouvez parfois oublier d'appuyer sur CTRL+SHIFT+ENTER. N'oubliez pas d'appuyer sur cette combinaison de touches chaque fois que vous entrez ou éditez un la formule de tableau.
    • D'autres utilisateurs peuvent ne pas comprendre vos formules. Les formules de tableaux sont relativement peu documentées, donc si d'autres personnes ont besoin de modifier vos cahiers d'exercices, vous devriez éviter les formules de tableaux ou vous assurer que ces utilisateurs comprennent comment les modifier.
    • selon la vitesse de traitement et la mémoire de votre ordinateur, les formules de grande série peuvent ralentir les calculs.
  2. Hérésie De Formule De Tableau .

7
répondu sancho.s 2017-05-23 12:26:32

=MATCH("*";A1:A10;-1) Pour données textuelles

=MATCH(0;A1:A10;-1) Pour données numériques

2
répondu liharvi 2015-09-07 15:23:04

=INDEX(A:A, COUNTA(A:A), 1) extrait de ici

1
répondu HattrickNZ 2014-09-14 23:31:00

J'ai essayé toutes les versions non-volatiles mais pas une seule version donnée ci-dessus a fonctionné.. excel 2003 / 2007update. Cela peut certainement être fait dans excel 2003. Pas comme un tableau ou une formule standard. J'obtiens soit juste un blanc, 0 ou une erreur de valeur. Alors j'ai recours aux méthodes volatiles .. Cela a fonctionné..

=recherche (2,1/(T4:T369<>""), T4: T369)

@Julian Kroné .. Utiliser"; "au lieu de", " ne fonctionne pas! Je pense que vous êtes en utilisant Bureau Libre pas MS excel? La recherche est si bruyante que je ne l'utilise qu'en dernier recours

1
répondu remote one 2017-03-10 04:09:35

placez ce code dans un module VBA. Enregistrer. Sous fonctions, L'utilisateur défini regarder pour cette fonction.

Function LastNonBlankCell(Range As Excel.Range) As Variant
    Application.Volatile
    LastNonBlankCell = Range.End(xlDown).Value
End Function
0
répondu Mac vd Wsthuizen 2013-01-28 07:18:31

Pour données textuelles:

EQUIV("";A1:A10;-1)

Pour données numériques:

EQUIV(0;A1:A10;-1)

cela vous donne l'indice relatif de la dernière case non vide dans la gamme 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:

INDIRECT("A" & (nb_line_where_your_data_start + EQUIV(...) - 1))
0
répondu Adel 2014-08-06 13:37:30

j'ai eu le même problème aussi. Cette formule fonctionne également aussi bien: -

=INDIRECT(CONCATENATE("$G$",(14+(COUNTA($G:$G535)-1))))

14 étant le numéro de ligne de la première ligne dans les lignes que vous souhaitez compter.

Chronique Clawtooth

0
répondu Chronic Clawtooth 2015-08-20 06:22:41

j'ai utilisé HLOOKUP

A1 a une date; A2:A8 a des prévisions captées à différents moments, je veux la dernière

=Hlookup(a1,a1:a8,count(a2:a8)+1)

utilise une formule HLOOKUP standard avec le tableau de recherche défini par le nombre d'entrées.

0
répondu Chris 2015-09-07 15:23:10

si vous savez qu'il n'y aura pas de cellules vides entre les deux, le moyen le plus rapide est celui-ci.

=INDIRECT("O"&(COUNT(O:O,"<>""")))

il compte juste les cellules non vides et se réfère à la cellule appropriée.

Il peut être utilisé pour une gamme spécifique.

=INDIRECT("O"&(COUNT(O4:O34,"<>""")+3))

renvoie la dernière case non vide dans la gamme O4:O34.

0
répondu Tassos Mallis 2015-10-18 06:55:00

pour Microsoft office 2013

"Dernière" d'une partie non vide de ligne:

=OFFSET(Sheet5!$C,COUNTA(Sheet5!$C:$C)-2,0)

"Dernière" non vide de ligne:

=OFFSET(Sheet5!$C,COUNTA(Sheet5!$C:$C)-1,0)
0
répondu aprodan 2016-09-20 01:46:01

cette formule a fonctionné avec moi pour office 2010:

=recherche (2;1/(A1:A100<>""); A1: a100)

A1: la première cellule A100: se référer à la dernière case en comparant

0
répondu Wahed 2017-08-28 08:31:46

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 cherche la dernière ligne avec les données dans la colonne A, cependant, j'utiliserais la suivante pour la recherche plus générique:

=MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0))

la première correspondance trouvera la dernière cellule de texte et la seconde la dernière cellule numérique. La fonction IFERROR renvoie zéro si la première correspondance trouve toutes les cellules numériques ou si la seconde trouve tout le texte cellule.

fondamentalement, il s'agit d'une légère variation de la solution de texte et de nombre mixte de W5ALIVE.

lors de l'essai du timing, ce délai était beaucoup plus rapide que les variations de recherche équivalentes.

pour retourner la valeur réelle de cette dernière cellule, je préfère utiliser la référence indirecte de la cellule comme ceci:

=INDIRECT("A"&MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0)))

la méthode offerte par sancho.s est peut-être une option plus propre, mais je modifierais la partie qui trouve le numéro de ligne:

=INDEX(MAX((A:A<>"")*(ROW(A:A))),1)

la seule différence étant que le", 1 "renvoie la première valeur alors que le", 0 " renvoie la totalité du tableau des valeurs (toutes sauf une qui ne sont pas nécessaires). J'ai encore tendance à préférer m'adresser à la cellule à la fonction d'index, en d'autres termes, retourner la valeur de la cellule avec:

=INDIRECT("A"&INDEX(MAX((A:A<>"")*(ROW(A:A))),1))

grand fil!

0
répondu FocusWiz 2018-06-06 15:11:02

si vous n'avez pas peur d'utiliser des tableaux, alors la formule suivante est très simple pour résoudre le problème:

= SOMME (SI (A: A<>"",1,0))

vous devez appuyer sur Ctrl + SHIFT + ENTER car c'est une formule de tableau.

0
répondu Bits_of_guy 2018-08-16 20:48:54

si vous recherchez dans la colonne (a) utilisez:

=INDIRECT("A" & SUMPRODUCT(MAX((A:A<>"")*(ROW(A:A)))))

si votre gamme est A1:A10 vous pouvez utiliser:

=INDIRECT("A" & SUMPRODUCT(MAX(($A:$A10<>"")*(ROW($A:$A10)))))

dans cette formule:

SUMPRODUCT(MAX(($A:$A10<>"")*(ROW($A:$A10))))

renvoie le dernier numéro de ligne non vide ,et indirect() Renvoie la valeur de la cellule.

0
répondu Sharif Lotfi 2018-09-26 17:20:13

un simple qui fonctionne pour moi:

=F7-INDEX(A:A,COUNT(A:A))
-1
répondu nemo 2013-12-05 11:47:19

Ok, donc j'ai eu le même problème que l'asker, et j'ai essayé les deux meilleures réponses. Mais seulement obtenir des erreurs de formule. Il s'est avéré que j'avais besoin d'échanger le "," à ";" pour que les formules fonctionnent. Je suis à l'aide de XL 2007.

exemple:

=LOOKUP(2;1/(A:A<>"");A:A)

ou

=INDEX(A:A;MAX((A:A<>"")*(ROW(A:A))))
-1
répondu Julian Kroné 2015-06-26 09:31:01

pour le suivi de version (ajout de la lettre v Au début du numéro), j'ai trouvé que celui-ci fonctionne bien dans Xcelsius (tableaux de bord SAP)

="v"&MAX(A2:A500)
-3
répondu Mr. B 2015-09-30 13:37:27