web-dev-qa-db-fra.com

Obtenir la dernière cellule non vide d'une colonne dans Google Sheets

J'utilise la fonction suivante 

=DAYS360(A2, A35)

calculer la différence entre deux dates dans ma colonne. Cependant, la colonne est en expansion constante et je dois actuellement modifier manuellement «A35» à mesure que je mets à jour ma feuille de calcul.

Existe-t-il un moyen (dans Google Sheets) de rechercher la dernière cellule non vide dans cette colonne, puis de définir dynamiquement ce paramètre dans la fonction ci-dessus?

79
MichaelS

Il y a peut-être un moyen plus éloquent, mais voici comment j'ai proposé:

La fonction permettant de trouver la dernière cellule renseignée dans une colonne est la suivante:

=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 ) ) ) ) ))
106
Sam Plus Plus

Pour trouver la dernière cellule non vide, vous pouvez utiliser INDEX et MATCH des fonctions telles que:

=DAYS360(A2; INDEX(A:A; MATCH(99^99;A:A; 1)))

Je pense que c'est un peu plus rapide et plus facile.

57
xxxbence

Si A2: A contient des dates contiguës, alors INDEX (A2: A, COUNT (A2: A)) renverra la dernière date. La formule finale est

=DAYS360(A2,INDEX(A2:A,COUNT(A2:A)))
33
Rubén

Si la colonne ne contient que des dates ajoutées de manière contiguë, comme dans mon cas, j’utilise la fonction MAX uniquement pour obtenir la dernière date.

La formule finale sera:

=DAYS360(A2; MAX(A2:A)) 
14
Poul

Mon favori est:

=INDEX(A2:A,COUNTA(A2:A),1)

Donc, pour le besoin du PO:

=DAYS360(A2,INDEX(A2:A,COUNTA(A2:A),1))
14
Eric Smalling

Bien que la question ait déjà reçu une réponse, il existe un moyen éloquent de le faire.

Use just the column name to denote last non-empty row of that column.

Par exemple:

Si vos données se trouvent dans A1:A100 et que vous souhaitez pouvoir ajouter davantage de données à la colonne A, par exemple, il peut s'agir de A1:A105 ou même de A1:A1234 ultérieurement, vous pouvez utiliser cette plage:

A1:A
7
Ramazan Polat

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 initiale:

=DAYS360(G10;index(G:G;max((G:G<>"")*row(G:G))))

Supposons que votre date initiale est en G10.

6
Andrew Anderson

En voici un autre:

=indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),""))))

Avec l'équation finale étant ceci:

=DAYS360(A2,indirect("A"&max(arrayformula(if(A:A<>"",row(A:A),"")))))

Les autres équations ici fonctionnent, mais celle-ci me plait, car il est facile d’obtenir le numéro de ligne, ce que j’ai besoin de faire plus souvent. Juste le numéro de ligne serait comme ceci:

=max(arrayformula(if(A:A<>"",row(A:A),"")))

Au départ, j’essayais de trouver ceci pour résoudre un problème de feuille de calcul, mais je n’ai rien trouvé d’utile qui donne le numéro de ligne de la dernière entrée. J'espère donc que cela est utile pour quelqu'un.

En outre, cela présente l'avantage supplémentaire de fonctionner pour n'importe quel type de données dans n'importe quel ordre. Vous pouvez avoir des lignes vides entre les lignes avec du contenu, et cela ne compte pas les cellules avec des formules évaluées à "". Il peut également gérer des valeurs répétées. Dans l’ensemble, c’est très similaire à l’équation qui utilise max ((G: G <> "") * row (G: G)) ici, mais il est un peu plus facile de tirer le numéro de la rangée si c’est ce que vous cherchez. .

Alternativement, si vous souhaitez mettre un script sur votre feuille, vous pouvez vous faciliter la tâche si vous envisagez 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 que la dernière ligne de la feuille que vous modifiez soit identique

=LASTROW()

ou si vous voulez la dernière ligne d'une colonne particulière de cette feuille ou d'une colonne particulière d'une autre feuille, vous pouvez procéder comme suit:

=LASTROW("Sheet1","A")

Et pour la dernière ligne d'une feuille particulière en général:

=LASTROW("Sheet1")

Ensuite, pour obtenir les données réelles, vous pouvez utiliser indirectement:

=INDIRECT("A"&LASTROW())

ou vous pouvez modifier le script ci-dessus aux deux dernières lignes de retour (les deux dernières puisque vous devez placer à la fois la feuille et la colonne pour obtenir la valeur réelle d'une colonne réelle) et remplacer la variable par la suivante:

return sheet.getRange(column + final).getValue();

et

return sheet.getRange(column + lastRow).getValue();

L'un des avantages de ce script est que vous pouvez choisir si vous souhaitez inclure des équations évaluant "". Si aucun argument n'est ajouté, les équations évaluant "" seront comptées, mais si vous spécifiez une feuille et une colonne, elles seront désormais comptées. En outre, il y a beaucoup de flexibilité si vous êtes prêt à utiliser des variantes du script.

Probablement exagéré, mais tout est possible.

4
Mearg

Calculez la différence entre la date la plus récente dans la colonne A et la date dans la cellule A2.

=MAX(A2:A)-A2
0
Happy Bird

J'ai emprunté un itinéraire différent. Comme je sais que je vais ajouter quelque chose dans une ligne/colonne une par une, je découvre la dernière ligne en commençant par compter les champs contenant des données. Je vais démontrer cela avec une colonne:

=COUNT(A5:A34)

Donc, disons que nous avons rendu 21. A5 a 4 rangées de moins, je dois donc obtenir la 21e position à partir de la 4e rangée. Je peux le faire en utilisant inderect, comme ceci:

=INDIRECT("A"&COUNT(A5:A34)+4)

Il recherche la quantité de lignes contenant des données et me renvoie un nombre que j'utilise comme modificateur d'index.

0
Tamir Nadav