我有两个Excel列表:
两列很重要:第一:唯一ID,第二:值(格式化数字)。
它可以是多次出现的值,也可以只出现一次。
我需要一个公式,它将从列表1中的列表2中查找值,然后将唯一ID与每个值匹配。
当没有直接价值时,重要的是。在这种情况下,它必须搜索大约3-5%的值偏差的样本。
示例:没有值127,但在3%内,找到125.
我尝试过索引和比较,但似乎无法正常工作。
VLOOKUP工作,但没有3-5%的偏差
我非常感谢你的帮助。
答案 0 :(得分:0)
如果列表中存在该值,您可以使用VLOOKUP
或INDEX(MATCH
来查找它 - 这是最简单的部分。如果列表中的值不,则需要找到最接近的值。
最接近的“低”值将是MAX
值≤我们的输入,最接近的“高”值将是MIN
值≥我们的输入。
如果您有Office 365,则可以在此处使用MINIFS($D$1:$D$6,$D$1:$D$6,">="&B1,$D$1:$D$6,"<="&(B1*1.05))
和MAXIFS($D$1:$D$6,$D$1:$D$6,"<="&B1,$D$1:$D$6,">="&(B1*0.95))
)。如果没有,你需要一个数组公式,我们可以在早期建立“±5%”,以简化公式。
从低值开始,我们希望MAX
值≤我们的输入和≥95%的输入值。将数组公式放在SUMPRODUCT
中以便我们可以在普通公式中使用它,我们得到=SUMPRODUCT(MAX($D$1:$D$6*--($D$1:$D$6<=B1)*--($D$1:$D$6>=(B1*0.95))))
高值稍微有点难度,因为我们不能只乘以0来取消任何太低或超过目标的105%。我们需要添加一个巨大的数字,例如1E+99
(一个带有ninty-nine 0s的1),以便MIN
忽略它们:SUMPRODUCT(MIN($D$1:$D$6+1E+99*(--($D$1:$D$6<B1)+--($D$1:$D$6>(B1*1.05)))))
最后几步是确定哪些数字更接近目标,然后找到要匹配的唯一ID。 %亲密度计算为(TARGET - LOW)/TARGET
和(HIGH - TARGET)/TARGET)
,而从另一个减去1会给您2-(HIGH + LOW)/TARGET
- 正数表示“高”更接近,负数表示“低”表示更接近,0意味着它们都是相同的距离(我将其默认为低数字)。然后,我们使用SIGN
将其更改为±1,添加2以获得1,2或3,然后使用CHOOSE
输出我们的数字。在伪代码中,CHOOSE(2+SIGN(2-(HIGH+LOW)/TARGET),LOW,LOW,HIGH)
和完整的东西:
CHOOSE(2+SIGN(2-(SUMPRODUCT(MAX($D$1:$D$6*--($D$1:$D$6<=B1)*--($D$6>B1*0.95)))+SUMPRODUCT(MIN($D$1:$D$6+1E+99*(--($D$1:$D$6<B1)+--($D$1:$D$6>(B1*1.05))))))/B1),SUMPRODUCT(MAX($D$1:$D$6*--($D$1:$D$6<=B1)*--($D$6>B1*0.95))),SUMPRODUCT(MAX($D$1:$D$6*--($D$1:$D$6<=B1)*--($D$6>B1*0.95))),SUMPRODUCT(MIN($D$1:$D$6+1E+99*(--($D$1:$D$6<B1)+--($D$1:$D$6>(B1*1.05))))))
现在,我们有一个号码。我们需要做的就是使用VLOOKUP
,或者使用MATCH
来获取它所在的行,并INDEX
来获取该行的数据:
Office 365:
=IFERROR(VLOOKUP(B1,$D$1:$E$6,2,FALSE),VLOOKUP(CHOOSE(2+SIGN(2-(MAXIFS($D$1:$D$6,$D$1:$D$6,"<="&B1,$D$1:$D$6,">="&(B1*0.95))+MINIFS($D$1:$D$6,$D$1:$D$6,">="&B1,$D$1:$D$6,"<="&(B1*1.05)))/B1),MAXIFS($D$1:$D$6,$D$1:$D$6,"<="&B1,$D$1:$D$6,">="&(B1*0.95)),MAXIFS($D$1:$D$6,$D$1:$D$6,"<="&B1,$D$1:$D$6,">="&(B1*0.95)),MINIFS($D$1:$D$6,$D$1:$D$6,">="&B1,$D$1:$D$6,"<="&(B1*1.05))),$D$1:E$7,2,FALSE))
否则:
=IFERROR(VLOOKUP(B1,$D$1:$E$6,2,FALSE),VLOOKUP(CHOOSE(2+SIGN(2-(SUMPRODUCT(MAX($D$1:$D$6*--($D$1:$D$6<=B1)*--($D$6>B1*0.95)))+SUMPRODUCT(MIN($D$1:$D$6+1E+99*(--($D$1:$D$6<B1)+--($D$1:$D$6>(B1*1.05))))))/B1),SUMPRODUCT(MAX($D$1:$D$6*--($D$1:$D$6<=B1)*--($D$6>B1*0.95))),SUMPRODUCT(MAX($D$1:$D$6*--($D$1:$D$6<=B1)*--($D$6>B1*0.95))),SUMPRODUCT(MIN($D$1:$D$6+1E+99*(--($D$1:$D$6<B1)+--($D$1:$D$6>(B1*1.05)))))),$D$1:E$7,2,FALSE))
(显然,将$D$1:$D$6
和$D$1:$E$6
更改为实际数据表范围,将B1
更改为输入值范围