根据多个条件查找或获取第二个较低的值
我已经多次searchfind我的问题的正确的公式。 但是,我不能根据需要得到准确或精确的结果。 让我给你看一个我的数据样本
ColA ColB ----------- BCD2 2009 ABC1 2012 BCD2 2013 ABC1 2011 XYZ3 2013 ABC1 2014 XYZ3 2014
从这组数据中,ColC应该返回每行的值(下一个较低年份)。 标准是:
- 值应该是比来自ColB的值更低的值。 (如2014年,如果2013年存在,那么它应该返回2013年,否则下一年。)
- 只能从相同的行中捕获较低的值,根据ColA的值设置标识
- 尽可能地,公式不应该是一个数组公式,为更好的performance,因为我正在处理大量的数据
- 如果没有更低的值,它应该返回一个空白。
然后基于上述标准,我必须得到以下结果:
ColA ColB ColC ----------- ---- BCD2 2009 ABC1 2012 2011 BCD2 2013 2009 ABC1 2011 XYZ3 2013 ABC1 2014 2012 XYZ3 2014 2013
我到目前为止所尝试的是:
{=LARGE(IF(A2:A11=A2,B2:B11,""),COUNTIF(B2:B11,MAX(B2:B11))+1)}
我试着做一个数组formula =LARGE(array,k)
,这有助于我的excel文件的性能下降。 如果可能的话,我真的希望得到一个公式(而不是数组),以获得所需的结果。
希望有人能够直接回答我,或者至less让我以正确的方式。
感谢大家!
看来你需要提供k为2的伪LARGEIF()函数。 如果您使用INDEX
生成了一个值的数组,那么将与A列不匹配或与B列等于或大于等于 B的任何值归零,那么您正在查找的值将是该数组的MAX
。 如果要在没有有效返回值的单元格中显示空string,则必须使用IF
语句对零进行testing。
=IF(COUNTIFS($A$2:$A$8,$A2,$B$2:$B$8,"<"&B2),MAX(INDEX((B$2:B$8)*($A$2:$A$8=$A2)*(B$2:B$8<$B2),,)),"")
如果您使用的是Excel 2010或更高版本,则可以尝试在C2中复制使用像这样的AGGREGATE函数
=IFERROR(AGGREGATE(14,6,B$2:B$11/(A$2:A$11=A2)/(B$2:B$11< B2),1),"")
AGGREGATE函数可以使用多个计算。 14相当于LARGE,所以它给出了符合标准的最大值,而忽略了错误(6)。 如果不存在这样的值,则返回一个错误(#NUM!),因此可以使用IFERROR函数将其转换为空白。 “数组input”不是必需的
如果您可以按ColA升序和ColB降序sorting,则可以使用行偏移。 所以,让你的数据:
ColA ColB ABC1 2014 ABC1 2012 ABC1 2011 BCD2 2013 BCD2 2009 XYZ3 2014 XYZ3 2013
然后你可以做一个简单的if语句,例如(在C2
,然后拖动):
=IF(A2=A3,B3,"")
这将返回:
ColA ColB ColC ABC1 2014 2012 ABC1 2012 2011 ABC1 2011 BCD2 2013 2009 BCD2 2009 XYZ3 2014 2013 XYZ3 2013
如果您有ColA升序和ColB升序,只需将其调整为=IF(A2=A1,B1,"")
即:引用上面的1行,而不是下面。
否则,我怀疑你可能被卡住了一个数组公式,因为你隐式地返回一个数组,在'返回所有的ColB值与ColA值匹配的当前ColA值'阶段,然后你做'然后find下一个最低ColB值“。