Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在不带宏的Excel中查找最大值并求和可变列数_Arrays_Excel - Fatal编程技术网

Arrays 在不带宏的Excel中查找最大值并求和可变列数

Arrays 在不带宏的Excel中查找最大值并求和可变列数,arrays,excel,Arrays,Excel,我有一个Excel表格: A B C D Day1 Day2 Day3 1 Ron 3 2 2 2 Don 4 2 1 3 Ton 1 5 2 在不同的工作表上,我需要生成以下类型的表(不使用宏): 其中,该值是每天每对值的最大值,在所有天数中求和。因此,如果只是3个名字和3天,我会使用下面的公式和一个VLOOKUP来查看每个名字在某一天的值,并为每一天复制/粘贴它。(旁注,实际上我的项

我有一个Excel表格:

    A    B    C    D    
        Day1 Day2 Day3
1 Ron    3    2    2  
2 Don    4    2    1
3 Ton    1    5    2
在不同的工作表上,我需要生成以下类型的表(不使用宏):

其中,该值是每天每对值的最大值,在所有天数中求和。因此,如果只是3个名字和3天,我会使用下面的公式和一个VLOOKUP来查看每个名字在某一天的值,并为每一天复制/粘贴它。(旁注,实际上我的项目并没有那么大,所以当我发布这个问题时,我本可以完成它,但我真的想学习如何以更智能的方式完成它)

我尝试了以下方法:

 {=SUM(MAX(VLOOKUP(Table2!$A2,Table1!$A:$D,{2,3,4},FALSE),VLOOKUP(Table2!D$1,Table1!$A:$D,{2,3,4},FALSE)))}
然而,显然VLOOKUP不能返回数组(索引匹配也不能)


任何帮助都将不胜感激。

L42是正确的-
VLOOKUP
查找值是一个范围或数组时返回数组时遇到问题,但使用数组代替列索引号时返回数组没有问题

要了解这一点,只需在单元格中放入一个
VLOOKUP
,例如

=VLOOKUP($A2,表1!$A:$D,{2,3,4},0)

然后选择单元格,按F2键选择公式,按F9键查看结果,得到的结果类似于
={3,2,2}

公式的问题是
MAX
只取两个
VLOOKUP
s返回的六个值中的最大值,它不会比较两个数组

要在单个公式中执行此操作,可以使用以下形式的公式:

=SUM(如果(array1>array2,array1,array2))

这将比较两个数组,并对每个位置的最大值求和,对于您的设置,这将是表2中的公式

=IF($A2=B$1,“-”,SUM(IF(VLOOKUP($A2,表1!$A:$D,{2,3,4},0)>VLOOKUP(B$1,表1!$A:$D,{2,3,4},0),VLOOKUP($A2,表1!$D,{2,3,4},0),VLOOKUP(B$1,表1,表1!$A:$D,{2,3,4},0))

按CTRL+SHIFT+ENTER键进行确认,然后进行横向和向下复制

如果列的数量较大,那么为了避免使用{2,3,4,5,6,7,8,9,10……等),可以使用
INDEX/MATCH
而不是像这样使用
VLOOKUP

=索引(表1!$B:$D,匹配($A2,表1!$A:$A,0),0)


注意:
索引
这里返回的是一个范围(不是数组)。
MATCH
函数确定行号和一个,因为列参数意味着您可以返回整行。问题是
SUM
MAX
无法计算它。因此,您需要在另一个单元格中输出矩阵或数组,然后在那里执行
SUM
MAX
函数。类似于我发布的内容。实际上,除了引用形式之外,还有一个数组形式。@Jeeped,这是真的,但在本文中的“数组形式”仅表示INDEX的第一个参数是数组,而不是返回数组
=SUM(MAX( VLOOKUP(Table2!$A2,Table1!$A:$D,2,FALSE), VLOOKUP(Table2!B$1,Table1!$A:$D,2,FALSE)), and so on Day2, Day3...
 {=SUM(MAX(VLOOKUP(Table2!$A2,Table1!$A:$D,{2,3,4},FALSE),VLOOKUP(Table2!D$1,Table1!$A:$D,{2,3,4},FALSE)))}