Détermination de la dernière ligne dans une seule colonne

J'ai une feuille avec des données en cols A à travers H.

Je dois déterminer la dernière ligne de la colonne A qui contient des données (tout est contigu - pas de lacunes dans les données / lignes).

Il est également données dans les autres colonnes qui ont plus lignes de données de la colonne A, donc j'ai besoin d'isoler uniquement la colonne A. (Et/ou juste une plage dans col A).

Je peux le faire au niveau de la feuille de calcul en utilisant

=COUNTA(A2:A100)

Cependant, dans tous mes la recherche D'une solution de Script Google Apps, tout ce que je semble trouver sont des exigences pour effectuer plusieurs fonctions englobant des dizaines de lignes de code - y compris beaucoup de choses i++... Ce que je pourrais faire de manière moins complexe en compensant directement à partir de A1.

Existe-t-il un moyen spécifique à la colonne de modifier cette méthode?

var aLast = ss.getDataRange().getNumRows();

Si un processus alambiqué est ce qui est requis, alors qu'il en soit ainsi. Mais je trouve ça difficile à imaginer (et encore plus difficile à trouver!) une simple solution.

Quelqu'un se soucie-t-il de m'éclairer (ou de faire éclater ma bulle)?

30
demandé sur Mogsdad 2013-07-13 20:42:48

9 réponses

Que diriez-vous d'utiliser un truc JavaScript?

var Avals = ss.getRange("A1:A").getValues();
var Alast = Avals.filter(String).length;

J'ai emprunté cette idée à partir de cette réponse. Le Array.filter() la méthode fonctionne sur le tableau Avals, qui contient toutes les cellules de la colonne A. en filtrant sur le constructeur d'une fonction native, nous ne récupérons que des éléments non nuls.

Cela fonctionne pour une seule colonne seulement; si la plage contient plusieurs colonnes, alors le résultat de filter() inclura des cellules de toutes les colonnes, et sera donc en dehors des dimensions peuplées de la gamme.

86
répondu Mogsdad 2018-01-13 16:14:19

Bien qu'il n'y ait pas de formule directe, je peux y penser, il ne nécessite pas de dizaines de lignes de code pour trouver la dernière ligne de la colonne A. essayez cette fonction simple. Utilisez - le dans une cellule de la manière normale que vous utiliseriez une autre Fonction =CountColA()

function CountColA(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  for(var i = data.length-1 ; i >=0 ; i--){
    if (data[i][0] != null && data[i][0] != ''){
      return i+1 ;
    }
  }
}
10
répondu Srik 2013-07-14 12:14:24

, Vous pouvez le faire en allant dans le sens inverse. À partir de la dernière ligne dans la feuille de calcul et en remontant jusqu'à une certaine valeur. Cela fonctionnera dans tous les cas, même si vous avez des lignes vides entre les deux. Le Code ressemble ci-dessous:

var iLastRowWithData = lastValue('A');
function lastValue(column) {
  var iLastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
  var aValues = SpreadsheetApp.getActiveSheet().getRange(column + "2:" + column + lastRow).getValues();

  for (; aValues[iLastRow - 1] == "" && iLastRow > 0; iLastRow--) {}
  return iLastRow;
}
4
répondu Akash Garg 2017-09-01 12:53:51

J'ai réécrit les fonctions getLastRow/getlastcolumn pour spécifier un index de ligne ou un index de colonne.

function get_used_rows(sheet, column_index){
      for (var r = sheet.getLastRow(); r--; r > 0) {
        if (sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getCell(r, column_index).getValue() != ""){
          return r;
          break;
        }
      }
    }

function get_used_cols(sheet, row_index){
  for (var c = sheet.getLastColumn(); c--; c > 0) {
    if (sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getCell(row_index, c).getValue() != ""){
      return c;
      break;
    }
  }
}
0
répondu Ashton Fei 2017-08-04 03:07:04

Pour obtenir le nombre de colonnes ou l'index de la dernière colonne:

var numColumns = sheet.getLastColumn()

Pour obtenir le nombre de lignes ou l'index de la dernière ligne:

var numRows = sheet.getLastRow()

var sheet = SpreadsheetApp.getActiveSheet()
0
répondu Ashish Verma 2018-04-29 22:15:02

Cela peut être une autre façon de contourner lastrow. Vous devrez peut-être jouer avec le code pour répondre à vos besoins

    function fill() {
      var spreadsheet = SpreadsheetApp.getActive();
      spreadsheet.getRange('a1').activate();
      var lsr = spreadsheet.getLastRow();
      lsr=lsr+1;
      lsr="A1:A"+lsr;

      spreadsheet.getActiveRange().autoFill(spreadsheet.getRange(lsr), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
};
0
répondu Tariq Khalaf 2018-05-22 02:11:18
var Direction=SpreadsheetApp.Direction;
var aLast =ss.getRange("A"+(ss.getLastRow()+1)).getNextDataCell(Direction.UP).getRow();
0
répondu Mrityunjay pandey 2018-07-23 07:12:48

Voici une autre façon de résoudre ce problème. Il utilise une boucle while mais prend en compte les espaces vides entre les lignes.

function getLastRow (column) {
  var iLastRow = ss.getActiveSheet().getMaxRows();
  var aValues = ss.getActiveSheet().getRange(column + ":" + column).getValues();
  var row = "";
  while(row == ""){
    row = aValues[iLastRow-1];
    iLastRow--;
  }
  return iLastRow;
}
-1
répondu dnlmzw 2018-03-21 09:30:26

J'utilise getDataRange() suivi de getNumRows(). La première fonction

Renvoie une plage correspondant aux dimensions dans lesquelles les données sont présentes

Et la deuxième fonction

Renvoie le nombre de lignes dans cette plage.

var ss = SpreadsheetApp.getActiveSpreadsheet();
var ws = ss.getActiveSheet();
var lastRow = ws.getDataRange().getNumRows();

P. S j'espère que cela fonctionne pour tous les cas.

-1
répondu urwaCFC 2018-03-30 07:16:22