113 votes

Sélection de la dernière valeur d'une colonne

J'ai une feuille de calcul avec des valeurs dans la colonne G. Certaines cellules sont vides entre les deux, et j'ai besoin de récupérer la dernière valeur de cette colonne dans une autre cellule.

Quelque chose comme :

=LAST(G2:G9999)

sauf que LAST n'est pas une fonction.

167voto

dohmoose Points 506

Réponse similaire à La réponse de Caligari mais nous pouvons l'améliorer en spécifiant simplement la plage complète de colonnes :

=INDEX(G2:G, COUNT(G2:G))

14 votes

Cela semble fonctionner tant qu'il n'y a pas d'espaces vides dans l'ensemble de données.

0 votes

Une autre bonne ressource est la réponse sélectionnée à productforums.google.com/forum/#!topic/docs/p3t3feg7Jic qui montre comment obtenir la première, la dernière ou la nième ligne d'un fichier FILTER() ed, similaire à Réponse de @Geta .

0 votes

Cette réponse stackoverflow.com/a/8161172/418111 a une formule qui prend en charge les cellules vides.

55voto

tinifni Points 1246

Cette solution prend donc une chaîne de caractères comme paramètre. Elle trouve combien de lignes il y a dans la feuille. Elle obtient toutes les valeurs de la colonne spécifiée. Elle boucle sur les valeurs de la fin au début jusqu'à ce qu'elle trouve une valeur qui n'est pas une chaîne vide. Enfin, elle récupère la valeur.

script :

function lastValue(column) {
  var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
  var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues();

  for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
  return values[lastRow - 1];
}

Utilisation :

=lastValue("G")

EDIT :

En réponse au commentaire demandant que la fonction soit mise à jour automatiquement :

Le meilleur moyen que j'ai trouvé est d'utiliser ceci avec le code ci-dessus :

function onEdit(event) {
  SpreadsheetApp.getActiveSheet().getRange("A1").setValue(lastValue("G"));
}

Il ne serait plus nécessaire d'utiliser la fonction dans une cellule telle que la cellule Utilisation la section des états. Au lieu de cela, vous devez coder en dur la cellule que vous souhaitez mettre à jour et la colonne que vous souhaitez suivre. Il est possible qu'il existe une manière plus éloquente de mettre en œuvre cette fonction (en espérant qu'elle ne soit pas codée en dur), mais c'est ce que j'ai trouvé de mieux pour le moment.

Notez que si vous utilisez la fonction dans une cellule comme indiqué précédemment, elle sera mise à jour lors du rechargement. Il existe peut-être un moyen de s'accrocher à onEdit() et forcer dans les fonctions de la cellule pour mettre à jour. Je n'arrive pas à le trouver dans la documentation.

5 votes

Il s'agit d'un script de Google Spreadsheet. Vous pouvez créer un nouveau script sous le nom de Tools -> Scripts -> Script editor...

1 votes

:O c'est incroyable ! Je ne savais pas que Google avait implémenté scripts. Merci beaucoup, cela a parfaitement fonctionné

1 votes

Comment faire pour qu'il soit mis à jour automatiquement lorsque je modifie les données dans la feuille ?

53voto

Getas Points 409

En fait, j'ai trouvé une solution plus simple ici :

http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=fr

Ça ressemble à ça :

=FILTER( A10:A100 , ROW(A10:A100) =MAX( FILTER( ArrayFormula(ROW(A10:A100)) , NOT(ISBLANK(A10:A100)))))

2 votes

Wow, c'est incroyablement propre. Pouvez-vous expliquer exactement comment cela fonctionne ?

1 votes

Pas vraiment : il est juste quand la gamme des sources est déjà triée.

5 votes

Expliqué : ROW renvoie le numéro de ligne, donc FILTER( ROW(A10:A100), NOT(ISBLANK(A10:A100) ) renvoie un tableau de tous les numéros de ligne non vides (pas leurs valeurs), par exemple [1,2, 3, 7, 12, 14]. Ensuite, MAX nous donne le numéro de la dernière ligne. Un deuxième FILTER est ensuite appliqué pour filtrer toutes les lignes où le numéro de ligne ne correspond pas à la valeur de l'option MAX (c'est-à-dire la valeur de la dernière ligne non vide).

44voto

caligari Points 897

La fonction LAST() n'est pas implémentée pour le moment afin de sélectionner la dernière cellule d'une plage. Cependant, en suivant votre exemple :

=LAST(G2:G9999)

nous sommes en mesure d'obtenir la dernière cellule en utilisant le couple de fonctions INDEX() y COUNT() de cette façon :

=INDEX(G2:G; COUNT(G2:G))

Il existe un exemple concret à la feuille spreeds où j'ai trouvé (et résolu) le même problème (feuille Orzamentos , cellule I5 ). Notez que cela fonctionne parfaitement même en faisant référence à d'autres feuilles dans le document.

1 votes

Cela fonctionne très bien, et se met à jour automatiquement lorsque la feuille change. Merci !

9 votes

J'aime la concision de cette suggestion, mais elle ne semble pas fonctionner lorsque la plage cible comprend des cellules vides (comme mentionné dans la question originale ci-dessus), puisque COUNT() ne compte pas les cellules vides.

0 votes

@JonSchneider vous pouvez utiliser COUNTA dans ce cas, si vous êtes sûr qu'il n'y a pas un seul blanc entre les valeurs de la colonne. Voir mes commentaires à la réponse de dohmoose.

9voto

user3280071 Points 41

Afin de renvoyer la dernière valeur d'une colonne de valeurs de texte, vous devez utiliser COUNTA, et donc cette formule :

=INDEX(G2:G; COUNTA(G2:G))

1 votes

Mais seulement s'il n'y a pas un seul blanc entre vos valeurs. Si c'est le cas, COUNTA combiné avec INDEX ne retournera pas la dernière valeur de la colonne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X