3 votes

Formule Excel, obtenir la dernière rangée lorsque la plage est dynamique

Je veux obtenir le dernier numéro de ligne d'une plage, mais la plage sera dynamique.

Je ne peux pas utiliser une plage nommée, car la plage définie peut parfois changer dans ma feuille de calcul. Par exemple, un jour la plage nommée peut être de 50 lignes, le lendemain de 51. À ma connaissance, l'intervalle nommé ne se modifie pas lui-même.

J'ai besoin de quelque chose comme : "Obtenez la dernière ligne où A:A = 'stack'".

J'essaie de faire quelque chose comme, https://www.excel-easy.com/examples/dynamic-named-range.html qui a du mal à se mettre en place.

Toute aide serait appréciée.

2voto

databyte Points 708

Dans une colonne avec du texte, vous pouvez trouver la dernière ligne qui a une valeur spécifique avec cette formule. Il s'agit d'une formule de tableau qui doit être confirmée par Ctrl+Shift+Enter.

=MAX((A1:A100="stack")*(ROW(A1:A100)))

Voir la cellule C1 dans la capture d'écran ci-dessous.

Vous pouvez utiliser cette fonction dans un nom de gamme dynamique. Cette formule démarre toujours la plage en A1 et descend jusqu'à la dernière occurrence d'une cellule contenant le texte "pile" :

=OFFSET(Sheet1!$A$1,0,0,MAX((Sheet1!$A$1:$A$100="stack")*(ROW(Sheet1!$A$1:$A$100))),1)

Dans le gestionnaire de noms, vous n'avez pas besoin d'utiliser Ctrl+Shift+Enter, puisque toutes les formules nommées sont automatiquement évaluées comme des formules de tableau. Si vous utilisez cette approche, il serait préférable de limiter le nombre de lignes dans la formule et de ne pas utiliser de références à des colonnes entières.

Notez les fourmis en marche dans la capture d'écran qui entourent la portée actuelle.

enter image description here

Si vous souhaitez inclure toutes les lignes jusqu'à la dernière ligne contenant du texte, vous pouvez utiliser une formule plus simple.

=OFFSET(Sheet1!$A$1,0,0,MATCH("zzzzz",Sheet1!$A:$A,1),1)

Avec Match, vous pouvez utiliser la référence d'une colonne entière.

0voto

dmb Points 1206

Disons que votre première cellule ne change jamais, et disons qu'elle est "A1" . Pour cela, vous devez utiliser un extrait comme celui-ci :

private function get_last_row(byref ws as worksheet, optional byval letter_of_first_col as string = "A", optional byval index_of_first_row as interger = 1) as long
    with ws
        get_last_row = .range(letter_of_first_row & index_of_first_row).currentRegion.rows.count + (index_of_first_row - 1)
    end with
end function

J'espère que cela vous aidera

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X