Google Spreadsheets:如何从一个范围获得第一个(第N个)行/列? (内置功能)

时间:2015-06-16 01:55:01

标签: google-sheets

说我有这个命名范围,而不是A1。

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

现在我该如何获得第一行?和第N行?第N列怎么样?作为范围,使用内置函数。

编辑:第N行:=OFFSET(ObjednavkyData, N,0, 1) 最后一行:

=OFFSET(ObjednavkyData, 
    MAX(ARRAYFORMULA(ROW(ObjednavkyData)))-ROW(ObjednavkyData), 0, 1
 )

4 个答案:

答案 0 :(得分:18)

只需使用INDEX功能:

=INDEX(NamedRange1,NRow,NColumn)

如果您想使用最后一行和一列:

=INDEX(NamedRange1,ROWS(NamedRange1),COLUMNS(NamedRange1))
  • INDEX比易变的替代OFFSETINDIRECT更有效。

示例:

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

<强>增加:

如果要获取整行,可以省略INDEX函数的[column]部分。如果您需要整列,请省略[row]部分。

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

答案 1 :(得分:1)

部分答案:(仍然对更好的人开放)

第1行

OFFSET(Data, 0 , 0, 1)

第一栏:

您只需调用范围内的某些功能即可获得第1列   或者,如果需要:

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

第N行:
这里的关键是OFFSET()只能向右和向下填充。所以你只需要通过它的参数来裁剪这些方向。

OFFSET(Data, N, 0, 1);

也可以通过将第一行提供给ARRAYFORMULA()和每列(单元格)来实现,使用INDEX(COLUMN(),ROW() + N)获取最后一行的单元格。

第N栏:

与上述类似,只需要获取行数。

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

我正在玩TRANSPOSE(),但似乎OFFSET()并没有很好地消化它。

答案 2 :(得分:1)

第一行:

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

第一栏:

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

第N行:

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

N'th Column:

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

用您的数据范围替换数据,用数据中需要的行/列替换N.行/列的计数从0开始计算。您可以使用 N-1 更改该购买。

如果你想获得实际范围(A:A,1:1,A3:A3)而不是值,只需在这些公式中删除 INDIRECT

希望这有帮助

答案 3 :(得分:1)

我想提出一种替代方法,它也适用于易失性未命名范围(例如,来自其他函数的输出,而不仅仅是电子表格中存在的范围。)一般的想法是使用FILTER()作为提取机制,并构造一个true / false值的向量,作为要提取的行的指示符。因此,例如,如果源范围是A1:D13,我想提取第7行,我会写

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

正如您所看到的,从任何地方提取任意数量的行也很容易。一般而言,构造公式如下:

=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), " "))
   }
  )