如何在MAKEARRAY生成的矩阵结果中使用OFFSET提取子矩阵?
从MAKEARRAY生成的矩阵中提取子矩阵
问题说明
用MAKEARRAY生成内存矩阵后,尝试用OFFSET提取子矩阵时返回#VALUE!错误——这是因为OFFSET仅支持单元格或单元格区域,无法处理内存数组(即函数生成的矩阵)。测试的错误公式如下:
=LET(data;MAKEARRAY(2;2;LAMBDA(row;col;row+col));OFFSET(data;;;1;1))
OFFSET函数中文说明
OFFSET函数以指定引用为参照,通过偏移量获取新的引用,返回结果可以是单个单元格或单元格区域。但该函数仅能作用于工作表上的单元格区域,不支持处理内存数组。
可行解决方案
方案1:用TAKE函数(Excel 365/2021及以上版本)
TAKE是专门针对数组的提取函数,语法简洁:
=LET(data;MAKEARRAY(2;2;LAMBDA(row;col;row+col));TAKE(data;1;1))
- 参数1:提取1行,参数2:提取1列,即获取矩阵左上角1x1的子矩阵。
- 若要从指定位置提取子矩阵,可结合DROP先偏移再提取:
该公式先跳过前1行1列,再提取后续2行2列的子矩阵。=LET(data;MAKEARRAY(4;4;LAMBDA(row;col;row+col));TAKE(DROP(data;1;1);2;2))
方案2:用INDEX函数
INDEX支持对内存数组进行索引,通过指定行、列序列提取连续子矩阵:
=LET(data;MAKEARRAY(2;2;LAMBDA(row;col;row+col));INDEX(data;SEQUENCE(1);SEQUENCE(1)))
SEQUENCE(1)生成行/列的索引序列,若要提取2行2列子矩阵,改为SEQUENCE(2)即可。- 提取指定起始位置的子矩阵(比如从第2行第2列开始取2行2列):
=LET(data;MAKEARRAY(4;4;LAMBDA(row;col;row+col));INDEX(data;SEQUENCE(2;1;2);SEQUENCE(2;1;2)))SEQUENCE(2;1;2)表示从第2位开始生成2个连续数,对应行号2、3,列号同理。
内容的提问来源于stack exchange,提问作者Seb
相关产品推荐
相关产品推荐

