从索引匹配中获取数组结果

从索引匹配中获取数组结果

因此与大多数索引匹配数组问题略有不同

我有一张从 A 到 B 的移动表。我可以有移动类型 1、类型 2、类型 3 或类型 4。

每个动作都对应一组不同的“卷起步骤”。这些步骤将是步骤 1、步骤 2 或步骤 3。

这种关系可以用一个简洁的表格来记录,如下所示:

Step      Type   Relationship
Step 1 - Type 1 - 1
Step 2 - Type 1 - 0
Step 3 - Type 1 - 0
Step 1 - Type 2 - 1
Step 2 - Type 2 - 1
Step 3 - Type 2 - 0
Step 1 - Type 3 - 0
Step 2 - Type 3 - 0
Step 3 - Type 3 - 1
Step 1 - Type 4 - 1
Step 2 - Type 4 - 1
Step 3 - Type 4 - 1

其中 1 表示“是的,它们有关系”,而 0 表示“否,它们无关系”。

现在有一个子步骤到步骤表,如下所示:

SubStep  --- Step
1             1
2             1
3             1
4             1
5             1
6             1
7             2
8             2
9             2
10            3
11            3
12            3

现在,我有一张子步骤表,以及我需要采取多少个子步骤。我有一张移动表,以及从 A 移动到 B 的移动单位数。我正在尝试计算出需要为每个子步骤添加多少个单位。

例如:

如果我的移动类型 1 为 100 个单位,我需要向子步骤 1 - 6 添加 100 个单位。如果我的移动类型 2 为 200 个单位,我需要向子步骤 1-6 添加额外的 200 个单位,使总共移动 300 个单位,然后将 200 个单位添加到子步骤 7-9。

我发现 sumproduct 可能是实现此目的的最佳方法。目前,它的第一部分如下所示:

=SUMPRODUCT(UnitMovementWorksheetCurrent[Units],--(UnitMovementWorksheetCurrent[Month]=[@Month]),--(UnitMovementWorksheetCurrent[Year]=[@Year]),--(UnitMovementWorksheetCurrent[From]=[@[Lab Abbr]]),--(INDEX(MovementToStepLookup[Roll up Step],MATCH(UnitMovementWorksheetCurrent[Movement Type],MovementToStepLookup[Movement Number],0))=[@[Roll up Step]]))

但是,不起作用的部分是(INDEX(MovementToStepLookup[Roll up Step],MATCH(UnitMovementWorksheetCurrent[Movement Type],MovementToStepLookup[Movement Number],0))=[@[Roll up Step]]))- 我期望从中得到一个 TRUE/FALSE 数组,但我只得到一个 #VALUE 错误。Index 正确地给了我一个数组,Match 正确地生成了一个数组,当合并这两个数组时(当逐步执行时),它只给了我一个数字,而不是一个数字数组,然后它给了我(例如){1} = 1,然后是一个 TRUE。

当我逐步执行公式时,这种方法有效,但当我突出显示要计算的整个内容时,它只会给我 #VALUE。所以我想我有两个问题(实际上,唯一的问题是如何提取我的数据,但稍微分解一下……):

1) 如何让索引匹配返回数组结果?
2) 我的公式哪里做错了?

答案1

因此,在进行了大量谷歌搜索之后,答案是奇怪且违反直觉的,并且在撰写本文时,我实际上并不知道它为什么起作用的所有原因,只是它(似乎!)起作用。

我之前犯了一个错误,我先将 rollup 步骤拉出来,然后进行比较。这是不正确的,无论是否使用,我都需要将其拉出来。比赛已略有改变以反映这一点。

强制 Index 返回多个结果的方法似乎有两种:1)使用条件语句,2)使用 N 函数,如下所示:

INDEX(MovementToStepLookup[已使用?],N(IF(TRUE,MATCH(UnitMovementWorksheetCurrent[移动类型],MovementToStepLookup[移动编号]*(MovementToStepLookup[上卷步骤]=[@[上卷步骤]]),0))))

对于我的条件,我只是将其设为 TRUE。为什么要费心去做更复杂的事情?对于 N,只需将数组传递给它即可。

我不知道为什么这样做有效。解释如何做到这一点的(好得多的文章)说他们也不确定为什么。更多阅读材料可在此处找到:https://excelxor.com/2014/09/05/index-returning-an-array-of-values/。不过,它确实有效,所以我很高兴

相关内容