为何Excel SEQUENCE函数传入一维数组至[start]参数时异常?
Excel SEQUENCE函数单元素数组参数的异常问题及解决
对比以下两个看似等效的公式:
=SEQUENCE(5,,1,)
=SEQUENCE(5,,{1},)
第一个公式返回预期结果:{1;2;3;4;5};第二个公式在单元格中仅显示1,但选中公式按F9键求值时,却能得到{1;2;3;4;5}。
通过INDEX函数可以解决这个问题,以下公式能正常运行:
=SEQUENCE(5,,INDEX({1},1,1),)
我在定义包含SEQUENCE的LAMBDA函数时(传入的不是字面量数组,而是预先定义的长度为1的数组变量),多次碰到这个问题,最初调试起来非常棘手。现在已经能识别这个问题,但仍困惑其成因——这是Excel的设计机制还是Bug?根本原因是什么?
此内容也可作为提醒,供其他遇到同类问题的用户参考。
编辑补充
受启发后,我定义了以下自定义LAMBDA函数,通过参数校验规避了引发该问题的场景:
=LAMBDA(rows,[columns],[from],[to],[by_col], IFS( OR(ROWS(rows)<>1, COLUMNS(rows)<>1, rows<>ROUND(rows,0), rows<=0), "Argument 'rows' must be a positive integer", IF(NOT(ISOMITTED(columns)), OR(ROWS(columns)<>1, COLUMNS(columns)<>1, columns<>ROUND(columns,0), columns<=0), FALSE()), "Argument 'columns' must be a positive integer", IF(NOT(ISOMITTED(from)), OR(ROWS(from)<>1, COLUMNS(from)<>1), FALSE()), "Argument 'from' must be a scalar", IF(NOT(ISOMITTED(to)), OR(ROWS(to)<>1, COLUMNS(to)<>1), FALSE()), "Argument 'to' must be a scalar", IF(NOT(ISOMITTED(by_col)), OR(ROWS(by_col)<>1, COLUMNS(by_col)<>1, AND(by_col<>0, by_col<>1)), FALSE()), "Argument 'by_col' must be a boolean", TRUE(), LET( final_rows,@rows, final_columns,IF(ISOMITTED(columns),1,@columns), size,final_rows*final_columns, final_from,IF(ISOMITTED(from),1,@from), final_to,IF(ISOMITTED(to),final_from+size-1,@to), final_by_col,IF(ISOMITTED(by_col),0,@by_col), IF(final_by_col, TRANSPOSE(SEQUENCE(final_columns,final_rows,final_from,(final_to-final_from)/(size-1))), SEQUENCE(final_rows,final_columns,final_from,(final_to-final_from)/(size-1)) ) ) ) )
我偏好这些参数设定,欢迎大家批评指正或优化。
内容的提问来源于stack exchange,提问作者ricewhitlam
相关产品推荐
相关产品推荐

