Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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
Excel 从匹配项()返回最后一个索引值_Excel - Fatal编程技术网

Excel 从匹配项()返回最后一个索引值

Excel 从匹配项()返回最后一个索引值,excel,Excel,我正在使用Excel中的时间序列数据与我们的程序员交流一些计算结果。我一直在尝试返回数组中最后一个最大值的索引位置。我一直在使用match()函数,如单元格D12: =匹配(C12,B2:B12,0) 这将返回值1,因为126.47在数组中的1和7位置重复。我真正想要返回的是7,最后一个最大值的位置。我已经研究了index()和lookup()函数,但没有成功。谢谢你的帮助 编辑1:为了澄清,匹配函数完成了我想要做的90%,除了这些重复项。下面是更多的数据,强调我唯一的错误是重复的: 您实际需

我正在使用Excel中的时间序列数据与我们的程序员交流一些计算结果。我一直在尝试返回数组中最后一个最大值的索引位置。我一直在使用match()函数,如单元格D12:

=匹配(C12,B2:B12,0)

这将返回值1,因为126.47在数组中的1和7位置重复。我真正想要返回的是7,最后一个最大值的位置。我已经研究了index()和lookup()函数,但没有成功。谢谢你的帮助

编辑1:为了澄清,匹配函数完成了我想要做的90%,除了这些重复项。下面是更多的数据,强调我唯一的错误是重复的:

您实际需要的是一个伪MAXIF函数

=MAX(INDEX(ROW($1:$11)*($B$2:$B$12=$C$12), , ))
这将返回行号(如a所示的范围内的位置)。要从列A中检索日期,这将是

=INDEX($A$2:$A$12, MAX(INDEX(ROW($1:$11)*($B$2:$B$12=$C$12), , )))
可以使用或代替检索中间值(如果有两个以上)

为了自己的目的进行转录时,请记住
行(1:11)
是B2:B12中的位置,而不是工作表上的实际行。返回的数字与类似匹配函数返回的数字类似

=MAX(INDEX(ROW($1:$11)*($B$2:$B$12=$C$12), , ))
编辑-浮动最后11个值:

要捕获最后11个值,应从列B和C单元格范围引用中删除绝对行引用

=MAX(INDEX(ROW($1:$11)*(B2:B12=C12), , ))

那么:

=MAX(IF(C12=$B$2:INDEX(B:B,COUNTA(B:B)),ROW($B$2:INDEX(B:B,COUNTA(B:B)))))-1

您需要使用ctrl+shift+enter组合键进行数组输入。

此处对行的使用并不严格。例如,如果OP出于任何原因决定将其数据从B2:B12移动到例如B4:B14,该怎么办?您的第一个公式不会给出正确的结果。OP是否一定知道行部分需要修改的内容?更好的是,你能修改你的结构,使它总是返回正确的答案,即使被查询的范围发生了变化?谢谢@XORLX,我应该澄清一下,我只提供了我的数据的一小部分。我确实需要在整个时间序列上向下滚动函数。@user1499626实际上我不是这个意思。也许你可以在原来的帖子中添加一些东西来澄清这一评论?也许还有一两个预期结果?@XORLX-足够公平;我添加了一些叙述作为解释。我也见过像
ROW(B2:B12)-ROW(B2)+1
这样的方法,但我认为这有点老套,不理解使用
ROW
在B2:B12中生成一系列可能匹配的潜在位置的概念。@Jeeped,你能澄清一下吗?“哈奇”?它如何表明“不理解使用ROW在B2:B12中生成一系列可能匹配的潜在位置的概念”?在我看来,像您在之前的评论中给出的结构,以及行(B2:B12)-MIN(行(B2:B12))+1,显示了更多的理解,并且没有我在您的结构中指出的缺点。如果要在不严格且可能需要用户输入的设置和严格且不需要用户输入的设置之间进行选择,为什么要选择前者?我想您会发现您偏移了一行(从B2:B12返回实际行,而不是从1:11返回)。