我已多次搜索以找到问题的正确公式。但是,根据需要,我无法准确或准确地获得它。让我向您展示我的数据样本
ColA ColB
-----------
BCD2 2009
ABC1 2012
BCD2 2013
ABC1 2011
XYZ3 2013
ABC1 2014
XYZ3 2014
从这组数据中,ColC应返回每行的值(下一个较低年份)。标准是:
然后根据上述标准,我必须得到以下结果:
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)}
我尝试过使用数组公式=LARGE(array,k)
,这会导致我的Excel文件性能下降。如果可能的话,我真的希望得到一个公式(不是数组),以获得理想的结果。
希望有人可以直截了当地回答我,或者至少引导我走正确的路。
谢谢大家!
答案 0 :(得分:2)
如果您使用的是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 函数将其转换为空白。 &#34;数组输入&#34;不是必需的
答案 1 :(得分:1)
如果您可以按ColA升序和ColB降序排序,则可以使用行偏移。所以制作你的数据:
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,"")
,即:引用上面的一行,而不是下面的行。
否则,我怀疑你可能会遇到一个数组公式,因为你在'返回所有ColB值并且ColA值与当前ColA值匹配'阶段之前隐式返回一个数组,然后再执行'然后找到下一个最低的ColB值'。
答案 2 :(得分:1)
您似乎需要将 k 的伪LARGEIF()功能提供为 2 。如果您使用INDEX
生成了一个值数组,这些值将与A列不匹配的任何内容归零,或者等于或大于到B列,那么您要查找的值将是该数组的MAX
。如果要在没有有效返回的单元格中显示空字符串,则必须使用IF
语句测试零。
=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),,)),"")