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/1/vue.js/6.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_Vba - Fatal编程技术网

Excel 在指定索引指出的列表或数组中查找最小值

Excel 在指定索引指出的列表或数组中查找最小值,excel,vba,Excel,Vba,我有一个200多个数字的列表(不同尺寸的钢制工具在许多不同尺寸的原材料上产生的废物,我试图找到六种工具的最佳组合,如果在所有尺寸的原材料上使用,产生的废物最少)。我有一些项目的组合,它们给出了最少的浪费和它们在列表中的位置(索引)(例如索引编号7、12、9、8、10和11) 现在我需要找出这些索引中哪一个指向列表中最小的项。(也就是说,如果索引指向所指出的六个值中的最小值,我需要公式来返回索引本身,例如上例中的9) 我不能只在整个列表中使用一个常规的MIN()来获得最小值,然后使用MATCH()

我有一个200多个数字的列表(不同尺寸的钢制工具在许多不同尺寸的原材料上产生的废物,我试图找到六种工具的最佳组合,如果在所有尺寸的原材料上使用,产生的废物最少)。我有一些项目的组合,它们给出了最少的浪费和它们在列表中的位置(索引)(例如索引编号7、12、9、8、10和11)

现在我需要找出这些索引中哪一个指向列表中最小的项。(也就是说,如果索引指向所指出的六个值中的最小值,我需要公式来返回索引本身,例如上例中的9)

我不能只在整个列表中使用一个常规的MIN()来获得最小值,然后使用MATCH()来查找索引,因为在列表之外的其他索引中可能会发现相同的浪费数据,而这些都是不好的(这是我开始使用的,但有时发现它指向非最佳工具)。 一开始听起来像是一个简单的问题(也许是吧!?),但我似乎找不到一个有效的解决方案(我不想使用VBA来解决这个问题,除非我必须这样做)

有什么想法吗

(参见本例中返回的红色错误索引)

通过其子函数(15)和k值1实现最小值。使用选项6强制任何不匹配的行进入错误并丢弃这些错误将获得匹配工具的最小值。另一个聚合匹配将任何匹配折扣到最小值,但不是工具选择将产生正确的结果

C4中的公式是

=INDEX($A$6:$A$22, AGGREGATE(15, 6, ROW($1:$17)/((C$6:C$22=AGGREGATE(15, 6, C$6:C$22/(ROW($1:$17)=$C$2:$H$2), ROW(1:1)))*(ROW($1:$17)=$C$2:$H$2)), 1))

根据需要正确填写


单元格高亮显示的条件格式

通过选择a6:J22,然后根据以下公式创建CF规则,创建条件格式,以显示浅灰色背景填充,指示与C2:H2中的工具子集匹配的工具索引(a6:A22)

=ISNUMBER(MATCH($A6, $C$2:$H$2, 0))
通过首先选择C6:J22并对CF规则使用以下公式,创建了突出显示适当过滤最小值的条件格式规则

=$A6=C$4
最后一个CF规则可能看起来过于简单,但一旦得到答案,就没有理由重新处理嵌套计算



⑨Excel 2010中引入了。早期版本中没有此功能。

如果您修改此功能,使其包含更少的颠簸和更多的数学细节,您会介意吗?我在思考解决此问题所需构造的目标函数时遇到困难。我试图以某种方式将其引入,但这也很难(stackoverflow是新出现的):-)常规匹配(MIN(I6:I22);I6:I22;0)不起作用,因为列表I6:I22中可能存在重复项。我的目标是=匹配(MIN(索引(I6:I22;{7;12;9;8;10;11};1));C2:H2;0),括号中的数字当然应该是索引列表的引用,C2:H2是索引号的引用。但这并不奏效。不确定这是否澄清了问题..?对我来说不太清楚。但是现在请随意保留它,看看是否有其他科学程序员在这个网站上捡到它。如果没有,那就把它放好,我来看看。恐怕我也不太清楚。也许一个较小的模拟示例,其中包含虚拟数据,您可以在其中指出所需的结果,这将有助于澄清。哇!吉普,那真是太令人印象深刻了!工作起来很有魅力(但我可以删除索引,因为嵌套聚合函数会生成我需要的相同索引)。我花了一段时间才弄明白这个公式里到底是怎么回事,但当我得到它的时候,我觉得我今天确实学到了一些东西!非常感谢!是的,该指数是用来恢复A6:A22中实际存在的任何东西的,聚合返回相对位置;巧合的是,相对位置与实际单元格值匹配。如果工具A、工具B等位于A6:A22中,则必须恢复索引。顺便说一句,图像中的这些单元格高光是通过示例工作簿中的条件格式创建的。如果你想了解他们的公式,请发表评论。当然,为什么不呢?如果不是这样的话,我可以确认我是否会用同样的方法来做(或者让本论坛的其他人可以使用:-)