说我有这个命名范围,而不是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
)
答案 0 :(得分:18)
只需使用INDEX
功能:
=INDEX(NamedRange1,NRow,NColumn)
如果您想使用最后一行和一列:
=INDEX(NamedRange1,ROWS(NamedRange1),COLUMNS(NamedRange1))
INDEX
比易变的替代OFFSET
和INDIRECT
更有效。示例:
=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), " "))
}
)