|
楼主 |
发表于 2022-5-27 20:04
|
显示全部楼层
本帖最后由 shaowu459 于 2022-5-30 18:16 编辑
第9个函数:TAKE函数
TAKE函数实现的功能是从一个数组中取出一个数组,该函数语法如下:
=TAKE(array, rows,[columns]),第一个参数是要提取一定行列的数组,第二参数是要提取的行数,正数表示从上到下,负数代表从下到上。第三参数是要提取的列数,正数表示从左到右,负数代表从右到左。下面通过简单的示例来说明其用法。
=TAKE(A1:E6,4)提取数组中的前4行:
=TAKE(A8:E13,-4)提取数组中的后4行:
如果也提取的行数超过数组的行数,则返回数组本身:
=TAKE(A24:E29,3,3)提取数组的前3行和前3列交叉的区域:
省略第二参数,只写第三参数,则提取数组左起的前3列:
=TAKE(A40:E45,3,-3)提取数组前3行的后3列:
=TAKE(A48:E53,-2,-3)行列均用负数,则提取数组后2行后3列交叉的数组:
如果提取下图中棕色标注的数组,可以用两个TAKE嵌套,先提取出前4列和前4行交叉数组,然后提取新数组后2行和后3列交叉区域:
数组是一列时:
数组是一行时:
TAKE经常用在与REDUCE函数配合,从累加器X中提取出后一行或后几行。
根据30楼的用法,TAKE函数参数支持数组:
上面图中SUBTOTAL之所以能起作用,是因为TAKE函数引用单元格区域返回的仍是单元格区域引用。后续MAP函数、REDUCE函数等也有这个性质。
补充一个知识点,XLOOKUP查询单元格区域返回的值也仍可以返回其行列属性。
在外层嵌套上ROW函数:
因此,在XLOOKUP函数查询结果的基础上,仍可以使用OFFSET等函数:
以前写过一个公式,大致意思是查询到某值后,把这一行以上的行全部去掉,然后在下面的区域中查找某值。利用XLOOKUP函数查询得到值,用ROW函数返回行号,然后用DROP函数从A:J列中舍弃上面所有行。
- =VLOOKUP("F",DROP(单价分析!A:J,ROW(XLOOKUP(B6,单价分析!B:B,单价分析!B:B,,))),9,)
复制代码
TAKE函数还可以用于两数组错位比较,比如一个100行的数组,TAKE(数组,99)=TAKE(数组,-99)这样错位比较,具体例子就不展示了。
|
评分
-
4
查看全部评分
-
|