如何使用数组公式对excel 3d数组

时间:2017-09-25 06:28:25

标签: excel multidimensional-array excel-formula

我在Excel中构建了一个计划工具。这包括一个开始和放大的任务列表。结束日期,以及可分配给每项任务的人员。

为了能够将这些数据输出到我们的预算系统中,我需要能够计算在给定月份内预订的员工成员时间百分比(总计所有任务)。

我能够使用以下公式计算某个特定任务在某个特定任务中工作人员的可用时间:

=SUM(INDEX(WorkdayArrayMonCol,MATCH(B2,WorkdayArrayDateCol)):INDEX(WorkdayArrayFriCol,MATCH(C2,WorkdayArrayDateCol))*TRANSPOSE('Staff Profile'!$B$13:$B$17))

这适用于单个任务,但我需要一个适用于一系列任务的等效任务。

我的尝试目前看起来像这样:

=IFERROR(MMULT(MMULT(TRANSPOSE(ROW(INDEX(WorkdayArrayMonCol,MATCH(B2:B12,WorkdayArrayDateCol)):INDEX(WorkdayArrayFriCol,MATCH(C2:C12,WorkdayArrayDateCol)))^0),INDEX(WorkdayArrayMonCol,MATCH(B2:B12,WorkdayArrayDateCol)):INDEX(WorkdayArrayFriCol,MATCH(C2:C12,WorkdayArrayDateCol))),'Staff Profile'!$B$13:$B$17),0)

+ CTRL + + 输入

公式使用“索引/匹配”查找B2:B12 (task start date) and C2:C12 (task end date)

如果任务超出当前月份的范围,请使用0 (0/01/1900)。这些搜索表WorkdayArray

有6列,Date,Mon,Tue ....到Fri,然后返回日期范围的2D数组,其中包含每个工作日在该范围内的总和的值。这对于准确捕捉公众假期是必要的。

然后将该2D阵列乘以工作人员工作可用性,其为'Staff Profile'!$B$13:$B$17,5个值中的每一个为0> => 1,表示Mon-Fri。例如,如果他们在星期二工作了半天,而在一周的其余时间工作了整天,则5个单元格看起来像{1,0.5,1,1,1}

使用此处发布的技术:How to use an array formula to return an array of sums in Excel我设法将其缩小为向量,但我无法总结最终总数。

使用上面的公式,输出为{8.5;4;2;2;0;0;0;0;0;0;1},这是每项任务的可用工作日,但我尝试使用链接的MMULT技术SUMPRODUCT对这些结果数据求和, SUMSUMIF会导致返回相同的数据:{8.5;4;2;2;0;0;0;0;0;0;1}

由于这个计算将在每个财政月(y)重复进行,因此,对于每个工作人员(x),通过使用(z)表作为x中的每一个来进行3D Excel表示是不可行的, y,& z是不切实际的大。我宁愿不使用VBA,而且我足够接近似乎应该可以使用公式。

非常感谢!

编辑:单页版本重新Zac的请求(相同的公式,调整后的参考):

单页版本:

我选择了11个单元来说明数组结果(我想要的是输出这些值之和的公式,17.5)。

1 个答案:

答案 0 :(得分:0)

我使用不同的方法来获得所需的结果,即这个数组公式:

=SUM(COUNTIFS(B2:B12,"<="&Table1[Date],C2:C12,">="&Table1[Date])*MMULT(Table1[[Monday]:[Friday]],P3:P7))

使用 CTRL + SHIFT + ENTER确认

COUNTIFS部分为您提供一个垂直向量,表示每个日期在B列和C日期范围中出现的次数,然后MMULT部分为您提供另一个垂直向量,其中包含每个日期的值基于P3:P7

然后可以将这两个向量相乘并对最终结果求和 - P12

中显示的 17.5

enter image description here