这是"的延续Is it possible to write a VBA code that searches for the exact same data or the closest one in the past?"
基本上我想扩展@Jeeped发布的功能,但由于某种原因它不按计划进行,尽管我做了他所展示的相同内容。
这种情况下的额外条件是用于生产果汁的机器必须与参数机器相当。
(我正在做的事情的形象)
基本上如果果汁是在29/09用机器M0制作的,那么我想拥有用于果汁的参数。显然没有使用30/09的参数,但使用机器M0的25/09参数。
我将上一个问题中发布的代码@Jeeped编辑为以下
=IFERROR(INDEX(C$2:C$10, MIN(INDEX(ROW($1:$10)+($A$2:$A$10>$F2)*1E+99+($B$2=$G$2),,))),"")
但是我收到了一个错误,我不知道为什么,但我觉得它与我写的内容有关($ B $ 2 = $ G $ 2)但我该如何解决?
免责声明:使用的百分比是虚构的,它只是我需要为多个工作簿工作所需的功能,这将自动完成我每个月需要做的一些工作。
答案 0 :(得分:2)
看起来您想要添加B列应与G2匹配的条件。这应该可以解决问题。
=IFERROR(INDEX(C$2:C$10, MIN(INDEX(ROW($1:$9)+(($A$2:$A$10>$F2)+($B$2:$B$10<>$G2))*1E+99,,))),"")
此类公式不会直接匹配。它排除了所有不匹配的东西,然后接受剩下的东西。因此,将F2中的日期与A列中的日期进行比较,任何较大的日期(即稍后)乘以一个非常大的数字。我们对G2中的机器ID执行相同的操作。任何与B列中的机器不匹配的东西都会乘以相同的非常大的数字。通过数学上排除任何不适合的东西,我们留下了合适的东西。
同样重要的是要注意ROW(1:9)是 C2中的位置:C10或A2:A10,而不是工作表上的实际行。
附录:现在日期未分类,我可以提供标准和数组公式来补偿。 I2的数组公式是
=SUMIFS(C$2:C$10,$A$2:$A$10,MAX(IF($A$2:$A$10<=$F2,IF($B$2:$B$10=$G2,$A$2:$A$10))),$B$2:$B$10,$G2)
必须使用Ctrl + Shift + Enter完成此操作,而不是简单地输入。一旦输入正确,它可以向右和向下填充。接下来是一个标准公式,不需要Ctrl + Shift + Enter,但完成同样的事情。您的结果应该类似于下图。
=SUMIFS(C$2:C$10, $A$2:$A$10,MAX(INDEX(($A$2:$A$10<=$F2)*($B$2:$B$10=$G2)*($A$2:$A$10),,)),$B$2:$B$10,$G2)
答案 1 :(得分:1)
我认为以下公式可能会回答您的问题。请参阅图片以供参考。
Formula Used: =INDEX($D$2:$E$7,MATCH(1,($B$2:$B$7<$H3)*($C$2:$C$7=$I3),0),1)
请注意 - 此要求您将参数更改日期从最新到最旧排序。
要应用此公式,请在编写公式后按CTRL + SHIFT + ENTER。这是excel理解这应该作为数组公式所必需的。在这样做时,excel会自动在公式的开头和结尾添加curley括号,如图中所示。
获得%橘子的公式只有很小的差异,将最后的1替换为2。
INDEX($D$2:$E$7,MATCH(1,($B$2:$B$7<$H3)*($C$2:$C$7=$I3),0),2)
希望这能回答你的问题。如果您需要进一步的帮助,请告诉我。