web-dev-qa-db-fra.com

Google Spreadsheets: Comment obtenir une première (Nième) ligne/colonne d'une plage? (fonctions intégrées)

Dites que j'ai cette plage nommée, pas à A1.

      idz01  idz04  ida02
foo     a      1      b
bar     c      3      8
baz     8      2      g

Maintenant, comment puis-je obtenir la première ligne? Et Nième rangée? Et comment la Nième colonne? En tant que gamme, en utilisant les fonctions intégrées.

Edit: Nième ligne: =OFFSET(ObjednavkyData, N,0, 1) Dernière ligne: 

=OFFSET(ObjednavkyData, 
    MAX(ARRAYFORMULA(ROW(ObjednavkyData)))-ROW(ObjednavkyData), 0, 1
 )
14
Ondra Žižka

Utilisez simplement la fonction INDEX:

=INDEX(NamedRange1,NRow,NColumn)

Si vous voulez la dernière ligne et la dernière colonne, vous pouvez utiliser:

=INDEX(NamedRange1,ROWS(NamedRange1),COLUMNS(NamedRange1))
  • INDEX est plus efficace que les alternatives OFFSET et INDIRECT qui sont volatiles.

Exemples:

=INDEX(ObjednavkyData,3,2) //This will return "c".
=INDEX(ObjednavkyData,ROWS(ObjednavkyData),COLUMNS(ObjednavkyData2)) //This will return "g".

Une addition:

Si vous souhaitez obtenir la ligne entière, vous pouvez omettre la partie [column] de la fonction INDEX. Et si vous avez besoin de toute la colonne, omettez la partie [row].

=INDEX(ObjednavkyData,3) //This will return row 3: "bar     c      3      8".
18
dePatinkin

Je voudrais proposer une méthode alternative, qui fonctionne également avec des plages volatiles sans nom (par exemple, la sortie d'autres fonctions, et pas uniquement des plages existantes dans le tableur.) un vecteur de valeurs true/false comme indicateur des lignes à extraire. Ainsi, par exemple, si la plage source est A1: D13 et que je souhaite extraire la ligne 7, j’écrirais

=filter(
   A1:D13,
   {transpose(split(rept("0 ", 6), " "));
    1;
    transpose(split(rept("0 ", rows(A1:D13)-7), " "))
   }
  )

Comme vous pouvez le constater, il est également facile de généraliser pour extraire n’importe quel nombre de lignes. En termes généraux, construisez la formule comme celle-ci:

=filter(
   <data>,
   {transpose(split(rept("0 ", <number rows to skip from the start>), " "));
    transpose(split(rept("1 ", <number of rows to extract>), " "));
    transpose(split(rept("0 ", <number of rows to skip until the end), " "))
   }
  )
1
ttarchala

Réponse partielle: (toujours ouvert aux meilleurs)

1er rang

OFFSET(Data, 0 , 0, 1)

Première colonne:

Vous pouvez simplement appeler certaines fonctions sur la plage et elles prennent la 1ère colonne.
Ou, si nécessaire:

OFFSET(Data, 0, 0, MAX(ARRAYFORMULA(ROW(Data))), 1)

Nième rangée:
La clé ici est que OFFSET() ne remplit que de bas en haut. Il vous suffit donc de rogner ces directions en fonction de ses paramètres.

OFFSET(Data, N, 0, 1);

Pourrait également être obtenu en passant la première ligne à ARRAYFORMULA() et pour chaque colonne (cellule), obtenir la cellule de la dernière ligne à l'aide de INDEX(COLUMN(),ROW() + N).

Nème colonne:

De la même manière que ci-dessus, vous devez uniquement connaître le nombre de lignes.

OFFSET(Data, 0, N, ROWS(Data), 1);

Je jouais avec TRANSPOSE() mais semble que OFFSET() ne le digère pas bien.

1
Ondra Žižka

Première rangée:

=INDIRECT(COLUMN(data)&":"&COLUMN(data))

Première colonne:

=INDIRECT(CHAR(64+COLUMN(data))&":"&CHAR(64+COLUMN(data)))

Nième rangée:

=INDIRECT(COLUMN(data)+N&":"&COLUMN(data)+N)

Nième colonne:

=INDIRECT(CHAR(64+COLUMN(data)+N)&":"&CHAR(64+COLUMN(data)+N))

Substituez les données avec votre plage de données et N avec la ligne/colonne dont vous avez besoin dans les données. Les lignes/colonnes sont comptées à partir de 0. Vous pouvez modifier cet achat en utilisant N-1 .

Si vous voulez obtenir la plage réelle (A: A, 1: 1, A3: A3) au lieu des valeurs, supprimez simplement leINDIRECTdans ces formules

J'espère que cela t'aides

1
Akshin Jalilov