Récupère la dernière cellule non vide d'une colonne dans Google Sheets
J'utilise la fonction suivante
=DAYS360(A2, A35)
Pour calculer la différence entre deux dates dans ma colonne. Cependant, la colonne est en constante expansion et je dois actuellement changer manuellement ' A35 ' lorsque je mets à jour ma feuille de calcul.
Existe-t-il un moyen (dans Google Sheets) de trouver la dernière cellule non vide de cette colonne, puis de définir dynamiquement ce paramètre dans la fonction ci-dessus?
9 réponses
Il peut y avoir une façon plus éloquente, mais c'est la façon dont je suis venu avec:
La fonction pour trouver la dernière cellule remplie dans une colonne est:
=INDEX( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ; ROWS( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ) )
Donc, si vous le combinez avec votre fonction actuelle, cela ressemblerait à ceci:
=DAYS360(A2,INDEX( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ; ROWS( FILTER( A:A ; NOT( ISBLANK( A:A ) ) ) ) ))
Si A2: A contient des dates contiguës alors INDEX(A2: a, COUNT(A2:A)) retournera la dernière date. La formule finale est
=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
Si la colonne ne s'est développée que par des dates ajoutées contiguës comme dans mon cas-j'ai utilisé juste la fonction MAX pour obtenir la dernière date.
La formule finale sera:
=DAYS360(A2; MAX(A2:A))
Mon préféré est:
=INDEX(A2:A,COUNTA(A2:A),1)
Donc, pour le besoin de L'OP:
=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))
Bien que la question soit déjà répondue, il existe une façon éloquente de le faire.
Use just the column name to denote last non-empty row of that column.
Par exemple:
Si vos données sont dans A1:A100
et que vous voulez pouvoir ajouter d'autres données à la colonne A, disons que cela peut être A1:A105
ou même A1:A1234
plus tard, vous pouvez utiliser cette plage:
A1:A
Qu'en est-il de cette formule pour obtenir la dernière valeur:
=index(G:G;max((G:G<>"")*row(G:G)))
Et ce serait une formule finale pour votre tâche originale:
=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G))))
Supposons que votre date initiale soit dans G10.
En voici un autre:
=indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),""))))
Avec l'équation finale étant la suivante:
=DAYS360(A2,indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),"")))))
Les autres équations ici fonctionnent, mais j'aime celle-ci parce que cela facilite l'obtention du numéro de ligne, ce que je trouve que je dois faire plus souvent. Juste le numéro de ligne serait comme ceci:
=max(arrayformula(if(A:A<>"",row(A:A),"")))
À l'origine, j'ai essayé de trouver juste ceci pour résoudre un problème de feuille de calcul, mais je n'ai rien trouvé d'utile qui donne juste le numéro de ligne de la dernière entrée, donc j'espère que cela est utile pour quelqu'un.
En outre, cela a l'avantage supplémentaire que cela fonctionne pour tout type de données dans n'importe quel ordre, et vous pouvez avoir des lignes vides entre les lignes avec du contenu, et il ne compte pas les cellules avec des formules qui évaluent à "". Il peut également gérer des valeurs répétées. Dans l'ensemble, il est très similaire à l'équation qui utilise max((G:G"")*row(G:G)) ici, mais rend le retrait du numéro de ligne un peu plus facile si c'est ce que vous recherchez.
Sinon, si vous voulez mettre un script sur votre feuille vous pouvez le rendre facile sur vous-même si vous prévoyez de le faire beaucoup. Voici ce scirpt:
function lastRow(sheet,column) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
if (column == null) {
if (sheet != null) {
var sheet = ss.getSheetByName(sheet);
} else {
var sheet = ss.getActiveSheet();
}
return sheet.getLastRow();
} else {
var sheet = ss.getSheetByName(sheet);
var lastRow = sheet.getLastRow();
var array = sheet.getRange(column + 1 + ':' + column + lastRow).getValues();
for (i=0;i<array.length;i++) {
if (array[i] != '') {
var final = i + 1;
}
}
if (final != null) {
return final;
} else {
return 0;
}
}
}
Ici, vous pouvez simplement taper ce qui suit si vous voulez la dernière ligne sur la même feuille que la feuille que vous êtes en train d'éditer:
=LASTROW()
, Ou si vous voulez la dernière ligne d'une colonne particulière de cette feuille, ou d'une colonne à partir d'une autre feuille, vous pouvez effectuer les opérations suivantes:
=LASTROW("Sheet1","A")
Et pour la dernière ligne d'une feuille en général:
=LASTROW("Sheet1")
Puis pour obtenir les données réelles, vous pouvez soit utiliser indirects:
=INDIRECT("A"&LASTROW())
Ou vous pouvez modifier le script ci-dessus sur les deux dernières lignes de retour (les deux dernières puisque vous devrez mettre à la fois la feuille et la colonne pour obtenir la valeur réelle d'une colonne réelle), et remplacer la variable par ce qui suit:
return sheet.getRange(column + final).getValue();
Et
return sheet.getRange(column + lastRow).getValue();
Un avantage de ce script est que vous pouvez choisir si vous voulez inclure des équations qui évaluent à"". Si aucun argument n'est ajouté équations évaluant à "" seront comptés, mais si vous spécifiez une feuille et une colonne, ils seront maintenant comptés. En outre, il y a beaucoup de flexibilité si vous êtes prêt à utiliser des variations du script.
Probablement exagéré, mais tout est possible.
La façon dont un amateur le fait est "=CONCATENATE("a", COUNTUNIQUE (A1:A9999))", où A1 est la première cellule de la colonne, et A9999 est plus bas que je ne m'attends à avoir des entrées. Ce résultat A# peut être utilisé avec la fonction indirecte au besoin.