在 Excel 中将非连续范围作为单个函数参数传递

Jam*_*Orr 2 microsoft-excel

我希望这张图片能解释这个问题(请参阅右下角的错误。)我需要将 B3:D3 加上 E4:G4 作为单个范围传递给 FORECAST.LINEAR 函数。我认为创建一个命名范围可能会有所帮助,但看起来这不起作用。

有什么方法可以将两个范围组合成一个概念范围,以便可以将其传递给这样的函数?

问题的例子

Jeo*_*rje 7

只是为了帮助那些想要概括这一点的人,它仅在范围没有行或列介入时才有效......而且......它也不起作用。例如,以下内容不会创建一个“连续”范围,就答案所暗示的这个特定问题发生的情况而言:

A1:C1 and F2:H2(如 A1:C1:F2:H2 或只是 Excel 使用该表达式的结果 A1:H2)

此示例将给出两行和八列,而不是由两个不连续范围组成的六个单元格的单个“行”。虽然答案产生的两行可能适用于这个问题,但即使这个问题也没有得到单行、六个单元格范围。

在为进行此实验而模拟的裸工作表中,人们将这些单元格填充为零。在真实的电子表格中,这些单元格可能填充真实的(非零、非空)数据。在这个问题中,完全按照图片所示进行设置,一切都很酷,有点,答案是 7。(不知道这是否是正确的答案,但似乎满足了发布者的要求。)但是将值添加到A2:C2 和 F1:H1...结果没有任何变化...一切似乎都很好,这些单元格一定不属于创建的范围的一部分...看起来。HOWEVER,开始将 , 中的六个单元格更改bar为 9,并且 7 的结果不会发生任何变化,直到所有单元格都有 9,此时#DIV/0!出现错误。实际上对于研究这一点很有用:当您在 A2:C2 或 F1:H1 之一中输入其他值时,它会恢复为 7。在这些单元格中使用 9 也很有趣,但有点偏离主题。

很明显,其他六个单元格是创建范围的一部分(也可以通过使用该公式的F9任一bar元素来支持,该公式显示{9,9,9,0,0,0;0,0,0,9,9,9}Excel 在内部使用它来解析公式。(如果您在其他单元格中输入任何其他值,则可以使用该公式)检查一下它们是否已填满。)

如所使用的,FORECAST.LINEAR()由于 x 和 y 使用相同的范围,因此给出 7:预测任何值时的 x 将与 y 相同,因为 x 和 y 值相同。

这给出了答案中给出的印象。对填充单元格的任何更改都必须给出 7,只要它们是数字即可。这使得它看起来像是创建了一个真实的、一排、六单元的连续范围,而不是真正存在的两排、六单元的野兽。错误#DIV/0!必须来自函数在现实世界中得出答案的步骤:如果所有值(即所有 9,而不是传递给函数的两个范围)都相同,则它不能为 a 生成任何 x 和 y 对。值不在单元格中,因为它们显然永远不会是现在以外的任何其他值。(鉴于其方法显然在这种情况下经历了除以 0 值的阶段,即使使用与它们相同的值作为预测 x 和 y 对的值也会失败。)

此外,范围如何创建并不重要。A1:H2 与 A1:C1:F2:H2 相同,也与使用命名范围相同。这个例子的简单性让人感觉好像已经成功了,但其实并没有成功。

然而,如果需要处理的单元格数量有限,则可以使用:

=CHOOSE({1,2,3,4,5,6},B3,C3,D3,E4,F4,G4)  (most any Excel)
Run Code Online (Sandbox Code Playgroud)

或者

=CHOOSE(SEQUENCE(1,6),B3,C3,D3,E4,F4,G4)  with newer Excel's
Run Code Online (Sandbox Code Playgroud)

创建单行数组。

人们甚至可以使用类似的东西:

=CHOOSE(SEQUENCE(1,6),OFFSET(B3:D3,0,0,1,1),OFFSET(B3:D3,0,1,1,1),OFFSET(B3:D3,0,2,1,1),OFFSET(E4:G4,0,0,1,1),OFFSET(E4:G4,0,1,1,1),OFFSET(E4:G4,0,2,1,1))
Run Code Online (Sandbox Code Playgroud)

拥有一个公式,可以使用来自另一个/其他单元格的文本输入来计算输入,从而使其任意长(很多单元格)。INDIRECT()没有帮助,所以这将是一种构建它而不是硬编码它的方法。

人们还可以创建一个范围,一个“辅助”范围来扩展“辅助”术语,其中包括以自己选择的方式的所有片段和位,然后引用该范围。人们甚至可以使用以下方法“自动化”它(如果可能使用动态范围,那么对辅助范围进行硬编码很难维护):

=IF(COLUMN()-1<=COUNTA(bar_1),INDEX(bar_1,1,COLUMN()-1),INDEX(bar_2,1,COLUMN()-1-COUNTA(bar_1)))
Run Code Online (Sandbox Code Playgroud)

并复制以包含足够的单元格来容纳整个范围。目前设置为从第一个范围的列开始,并且不考虑跳过的列。所以它基本上解决了图片中的内容。必须复制到辅助范围中的每个单元格,而不是溢出(它不会像上面那样溢出,但也许可以修改,但这会毁掉它),并且它本身可以动态引用。另外,如果范围重叠,它就不会(可能未经测试)工作,尽管可能UNIQUE()会有所帮助。这主要是一个 3D 问题,而不是 2D 问题。由于辅助范围中的每个单元格需要一个“完整”公式,因此您无法在命名范围中构建它,据我所知。