Cette solution prend donc une chaîne comme paramètre. Il recherche le nombre de lignes de la feuille. Il obtient toutes les valeurs de la colonne spécifiée. Il parcourt les valeurs de la fin au début jusqu'à ce qu'il trouve une valeur qui n'est pas une chaîne vide. Enfin, il renvoie la valeur.
Scénario:
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];
}
Usage:
=lastValue("G")
ÉDITER:
En réponse au commentaire demandant la mise à jour automatique de la fonction:
La meilleure façon que j'ai pu trouver 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 comme les états de la section Utilisation . Au lieu de cela, vous codez 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 l'implémenter (j'espère qu'elle n'est pas codée en dur), mais c'est la meilleure que je puisse trouver pour le moment.
Notez que si vous utilisez la fonction dans la cellule comme indiqué précédemment, elle sera mise à jour lors du rechargement. Il existe peut-être un moyen de se connecter onEdit()
et de forcer les fonctions de cellule à se mettre à jour. Je ne peux tout simplement pas le trouver dans la documentation.
Tools -> Scripts -> Script editor...
Réponse similaire à la réponse de caligari , mais nous pouvons la ranger en spécifiant simplement la plage de colonnes complète:
la source
FILTER()
plage ed, similaire à la réponse de @ Geta .COUNT(G2:G)
renvoie 0. À la place, utilisezCOUNTA(G2:G)
qui ne compte que le nombre de valeurs dans un ensemble de données.COUNTA
n'est utile qu'en combinaison avecINDEX
pour obtenir la dernière valeur s'il n'y a pas un seul espace entre vos valeurs.COUNTA
.COUNT
ne compte que les valeurs numériques: il renverra 0 lorsqu'il est donné par exemple des cellules de texte.En fait, j'ai trouvé une solution plus simple ici:
http://www.google.com/support/forum/p/Google+Docs/thread?tid=20f1741a2e663bca&hl=fr
Cela ressemble à ceci:
la source
ROW
renvoie le numéro de ligne, doncFILTER( 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]. PuisMAX
nous donne le dernier numéro de ligne. Une secondeFILTER
est ensuite appliquée pour filtrer toutes les lignes dont le numéro de ligne ne correspond pas à la valeur deMAX
(c'est-à-dire la valeur de la dernière ligne non vide).La fonction LAST () n'est pas implémentée pour le moment afin de sélectionner la dernière cellule dans une plage. Cependant, en suivant votre exemple:
nous pouvons obtenir la dernière cellule en utilisant le couple de fonctions INDEX () et COUNT () de cette manière:
Il y a un exemple en direct sur le spreedsheet où j'ai trouvé (et résolu) le même problème (feuille
Orzamentos
, celluleI5
). Notez que cela fonctionne parfaitement même en se référant à d'autres feuilles dans le document.la source
COUNTA
dans ce cas si vous êtes sûr qu'il n'y a pas un seul espace entre les valeurs de la colonne. Voir mes commentaires pour la réponse de dohmoose.:G
désigne le dernier élément? Est-ce documenté?Résumé:
Détails:
J'ai regardé et essayé plusieurs réponses, et voici ce que j'ai trouvé: La solution la plus simple (voir la réponse de Dohmoose ) fonctionne s'il n'y a pas de blancs:
Si vous avez des blancs, cela échoue.
Vous pouvez gérer un blanc en passant simplement de
COUNT
àCOUNTA
(voir la réponse de user3280071 ):Cependant, cela échouera pour certaines combinaisons de blancs. (
1 blank 1 blank 1
échoue pour moi.)Le code suivant fonctionne (voir la réponse de Nader et le commentaire de jason ):
mais il faut se demander si vous voulez utiliser
COLUMNS
ouROWS
pour une plage donnée.Cependant, si
COLUMNS
est remplacé par,COUNT
je semble obtenir une implémentation fiable et à l'épreuve des blancs deLAST
:Et comme
COUNTA
le filtre est intégré, nous pouvons simplifier davantage l'utilisationC'est un peu simple et correct. Et vous n'avez pas à vous soucier de savoir s'il faut compter les lignes ou les colonnes. Et contrairement aux solutions de script, il se met automatiquement à jour avec les modifications apportées à la feuille de calcul.
Et si vous souhaitez obtenir la dernière valeur d'une ligne, modifiez simplement la plage de données:
la source
Pour renvoyer la dernière valeur d'une colonne de valeurs de texte, vous devez utiliser COUNTA, vous aurez donc besoin de cette formule:
la source
COUNTA
combiné avecINDEX
ne renverra pas la dernière valeur de la colonne.essaye ça:
=INDIRECT("B"&arrayformula(max((B3:B<>"")*row(B3:B))))
Supposons que la colonne dans laquelle vous recherchez la dernière valeur soit B.
Et oui, cela fonctionne avec des blancs.
la source
Il semble que Google Apps Script prend désormais en charge les plages en tant que paramètres de fonction. Cette solution accepte une gamme:
Consultez également la discussion dans le forum d'aide Google Apps Script: Comment forcer le recalcul des formules?
la source
J'ai regardé les réponses précédentes et elles semblent travailler trop dur. Peut-être que la prise en charge des scripts s'est simplement améliorée. Je pense que la fonction est exprimée comme ceci:
Dans ma feuille de calcul, j'utilise ensuite:
Dans la fonction, j'obtiens un tableau de valeurs avec une par cellule référencée et cela se répète simplement de la fin du tableau vers l'arrière jusqu'à ce qu'il trouve une valeur non vide ou soit à court d'éléments. Les références de feuille doivent être interprétées avant que les données ne soient transmises à la fonction. Pas assez sophistiqué non plus pour gérer les multi-dimensions. La question demandait la dernière cellule d'une seule colonne, elle semble donc convenir. Il mourra probablement si vous manquez de données.
Votre kilométrage peut varier, mais cela fonctionne pour moi.
la source
pas de codage en dur.
la source
Celui-ci fonctionne pour moi:
la source
Cela obtient la dernière valeur et gère les valeurs vides:
la source
=INDEX( FILTER( 88:88 , NOT(ISBLANK(88:88))) , columns( FILTER( 88:88 , NOT(ISBLANK(88:88)) ) ) )
=INDEX( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row())))) , columns( FILTER( indirect(row()&":"&row()) , NOT(ISBLANK(indirect(row()&":"&row()))) ) ) )
Dans une colonne avec des blancs, vous pouvez obtenir la dernière valeur avec
la source
La réponse
ne fonctionne pas correctement dans LibreOffice. Cependant, avec un petit changement, cela fonctionne parfaitement.
Cela ne fonctionne toujours que si la plage réelle est inférieure à
(G2:G10000)
la source
Est-il acceptable de répondre à la question originale avec une réponse strictement hors sujet :) Vous pouvez écrire une formule dans la feuille de calcul pour ce faire. Moche peut-être? mais efficace dans le fonctionnement normal d'un tableur.
Ceci est proposé comme une réflexion pour une gamme de questions dans la zone de script qui pourraient être livrées de manière fiable avec des formules matricielles qui ont l'avantage de fonctionner souvent de manière similaire dans Excel et OpenOffice.
la source
la source
Je jouais avec le code donné par @tinfini, et je pensais que les gens pourraient bénéficier de ce que je pense être une solution légèrement plus élégante (notez que je ne pense pas que les scripts fonctionnaient tout à fait de la même manière quand il a créé la réponse originale) ...
En utilisation, cela ressemblerait à ceci:
la source
En ce qui concerne le commentaire de @ Jon_Schneider, si la colonne contient des cellules vides, utilisez simplement COUNTA ()
la source
J'ai trouvé un autre moyen, peut-être que cela vous aidera
=INDEX( SORT( A5:D ; 1 ; FALSE) ; 1 )
-retournera la dernière lignePlus d'informations sur anab ici: https://groups.google.com/forum/?fromgroups=#!topic/How-to-Documents/if0_fGVINmI
la source
J'ai trouvé une légère variation qui a permis d'éliminer les blancs du bas du tableau. = index (G2: G, COUNTIF (G2: G, "<>"))
la source
Je suis surpris que personne n'ait jamais donné cette réponse auparavant. Mais cela devrait être le plus court et cela fonctionne même dans Excel:
G2:G<>""
crée un tableau de 1 / true (1) et 1 / false (0). DepuisLOOKUP
fait une approche descendante pour trouver2
et comme il ne trouvera jamais 2, il arrive à la dernière ligne non vide et donne la position de cela.L'autre façon de procéder, comme d'autres l'ont peut-être mentionné, est:
Trouver le
MAX
imumROW
de la rangée non vierge et l' introduire dansINDEX
Dans un tableau à zéro interruption vide, Utiliser la
INDIRECT
RC
notation avecCOUNTBLANK
est une autre option. Si V4: V6 est occupé avec des entrées, alors,V18 :
donnera la position du V6.
la source
pour obtenir la dernière valeur d'une colonne, vous pouvez également utiliser la
MAX
fonction avec laIF
fonctionla source