web-dev-qa-db-fra.com

Génération dynamique de liste / tableau de cellules à partir de la plage dans Google Spreadsheets

Je veux créer un tableau/une liste de cellules (je ne connais pas la terminologie exacte), sous forme de lignes ou de colonnes, couvrant la plage entre 2 chiffres

Fox exemple, j'ai 2 cellules, A1 = 3; B1 = 10

Je souhaite générer de manière dynamique un tableau de cellules couvrant la plage comprise entre A1 et B1:

C1 = 3
C2 = 4
C3 = 5
...
C8 = 10

3
ireallydontknow

Je voudrais tiliser un script pour cela. Quelque chose comme ça:

function generateArray() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var dest = sheet.getActiveRange();
  var destRow = dest.getRow();
  var destCol = dest.getColumn();
  var startValue = sheet.getRange(1, 1).getValue(); //Start value in cell A1
  var endValue = sheet.getRange(1, 2).getValue();   //End value in cell B1

  for (i = startValue; i <= endValue; i++){
    sheet.getRange(destRow, destCol).setValue(i);
    destRow++;
  }
}

Sélectionnez la cellule dans laquelle vous souhaitez que le premier numéro apparaisse et exécutez le script.

Si vous voulez vraiment utiliser une fonction, vous pouvez utiliser ceci:

=IF(AND(C1+1<=$B$1,C1<>""),C1+1,"")

Définissez la première cellule (C1 dans ce cas) sur =A1, collez la formule ci-dessus dans C2 et faites glisser le coin vers le bas pour qu'il soit copié.

L'inconvénient de la formule, en particulier si vous avez une grande plage, est que vous devez la faire glisser pour couvrir le même nombre de cellules que la plage. Si vous utilisez le script, il vous suffit de sélectionner la première cellule et de l’exécuter. Un avantage de la formule, cependant, est que les cellules se mettent à jour automatiquement. (Vous pouvez toutefois modifier le script pour qu'il s'exécute automatiquement lorsque vous modifiez les cellules de la plage, si vous le souhaitez.)

1
Punchlinern

Ceci peut également être réalisé en utilisant ArrayFormula:

=ArrayFormula(row(offset(A$1,0,0,max-min+1))+min-1)

Semblable à la réponse de @ pnuts, il manipule la fonction row() pour indiquer la plage de valeurs souhaitée.
Notez que le A$1 peut faire référence à n'importe quelle colonne. Son contenu importe peu tant qu'il est dans la première ligne. La fonction offset définit ensuite la plage de valeurs dont nous avons besoin.

En général, vous pouvez traiter l'argument de la fonction de ligne comme le domaine (entier) de x et l'utiliser pour calculer toute fonction mathématique. Par exemple. Les 10 premiers nombres pairs (y = 2x) peuvent être donnés par ArrayFormula(2*row(1:10)).

1
Irin Thirdwater

Une formule qui pourrait être placée dans n'importe quelle colonne (autre que A ou B) dans la rangée 1 et qui n'exige pas que C1 soit ensemencé avec la valeur A1:

=if(row()<B$1-A$1+2,A$1+row()-1,"")  

Cependant, comme avec @ Punchlinern's, il doit être copié suffisamment loin pour occuper au moins une ligne de plus que la différence entre B1 et A1.

1
pnuts