为什么 Excel SEQUENCE 函数在将一维数组传递给其 [start] 参数时出现问题?

问题描述 投票:0回答:1

考虑以下两个公式,(在我看来)它们应该返回相同的结果:

=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 的数组的变量),我一直遇到这个问题,最初我发现调试非常令人沮丧。现在我知道要留意它,但我很烦恼,这根本就是一个问题。我想了解为什么会发生这种情况 - 是有意为之,还是一个错误?根本原因是什么?

我也在考虑将这篇文章作为一种公益广告,以防其他人遇到这个问题。当我进行谷歌搜索时,我找不到其他人讨论这个问题,尽管我确实发现了一个与如何创建数组公式相关的类似问题(当需要 Shift Ctrl Enter 时),链接如下。

https://www.excelforum.com/excel-formulas-and-functions/1144391-formula-result-using-f9-is- Different-than-what-is-displayed-in-the-cell.html

编辑: @FlexYourData 启发我定义以下内容:

=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))
)
)
)
)

我更喜欢这些论点而不是标准论点,这应该避免引发这篇文章的问题。欢迎大家批评或改进。

excel
1个回答
4
投票

非常有趣的问题。简而言之,这些参数需要标量参数,因此必须将数组强制转换为标量,函数才能按预期工作。

除此之外我现在没有一个好的答案,但我会尽力找出答案。

现在,我想指出,您还可以使用单个运算符

@
将 1x1 数组强制转换为标量。除了警告消息之外,这会按预期生成数组:

=SEQUENCE(5,,@{1},)

并且适用于变量:

=LET(_start, {1}, SEQUENCE(5,,@_start,))

您对行和列 1 的 INDEX 的调用正在做同样的事情 - 将数组转换为标量。

当我尝试寻找更多信息时(不能保证我会找到更多有启发性的信息,但我会尝试),让我提出一个开放性问题:

您期望这个公式的结果是什么?

=SEQUENCE(5,,{1, 2},)

还是这个?

=SEQUENCE(5,,SEQUENCE(2,2),)
© www.soinside.com 2019 - 2024. All rights reserved.