MIN函数混合数字/字母值

我有一张带有学生logging的表格,列出他们入学的几个方面,包括他们的身份,入学年份,入学条件,学生types等。

下面的公式在表中的一列中,并且完美地用于识别学生的每个他们的id和types组合的最小年(最小年)。 但是,只有当数值是数值时,它才能正常工作。 一些术语是诸如“A1”,“A2”,“A3”,“J1”,“J2”,“J3”,“M1”,“M2”,“M3”的字母/数字组合, ,代码返回一个#VALUE! 错误。

记录错误的快照

=MIN(IF(([id_num]=[@[id_num]])*([TYPE CONSOLIDATION]=[@[TYPE CONSOLIDATION]]),NUMBERVALUE([yr_cde])))&"("&MIN(IF(([id_num]=[@[id_num]])*([TYPE CONSOLIDATION]=[@[TYPE CONSOLIDATION]]),IF(NUMBERVALUE([yr_cde])=MIN(IF(([id_num]=[@[id_num]])*([TYPE CONSOLIDATION]=[@[TYPE CONSOLIDATION]]),NUMBERVALUE([yr_cde]))),NUMBERVALUE([trm_cde]))))&")" 

通过一些研究,我发现了一个索引/匹配公式: =INDEX([trm_cde],MATCH(MIN(CODE([trm_cde])),CODE([trm_cde]),0))将返回该项的最小值对于表中的所有logging,但经过多次尝试,我无法弄清楚如何将其纳入公式中,我需要通过ID,types和最低年份标准来确定最小值。

用这个:

 =INDEX([yr_cde],MATCH(MIN(IF([@[id_num]]&[@[TYPE CONSOLIDATION]]=[id_num]&[TYPE CONSOLIDATION],[yr_cde])),[yr_cde],0))&"("&INDEX([trm_cde],MATCH(MIN(IF([@[id_num]]&[@[TYPE CONSOLIDATION]]=[id_num]&[TYPE CONSOLIDATION],[yr_cde])),[yr_cde],0))&")" 

这是一个数组公式,所以需要用CtrlShiftEnter确认

刚刚意识到这只会工作,如果表格按if_num,yr_code,trm_cdesorting。


编辑2:

这个公式可以工作,不pipesorting顺序如何:

 =INDEX([yr_cde],MATCH(MIN(IF([id_num]&[TYPE CONSOLIDATION]=[@[id_num]]&[@[TYPE CONSOLIDATION]],[yr_cde]*1000+(CODE([trm_cde])*10)+RIGHT([trm_cde],1))),[yr_cde]*1000+(CODE([trm_cde])*10)+RIGHT([trm_cde],1),0))&"("&INDEX([trm_cde],MATCH(MIN(IF([id_num]&[TYPE CONSOLIDATION]=[@[id_num]]&[@[TYPE CONSOLIDATION]],[yr_cde]*1000+(CODE([trm_cde])*10)+RIGHT([trm_cde],1))),[yr_cde]*1000+(CODE([trm_cde])*10)+RIGHT([trm_cde],1),0))&")" 

这是一个数组公式,所以需要用CtrlShiftEnter确认

我相信你可能会误解NUMBERVALUE¹函数的作用 。 它的用途是将区域数字格式(例如2.500,27 )的文本看起来像一个数字翻译成可以用math方法处理的原始数字格式。 它并不是试图将严格的文本值(如J1)解释为数值。 这是#VALUE的来源! 错误在trm_cde列上。 在yr_cde列上使用NUMBERVALUE是不必要的,因为不需要区域翻译。 简单地在yr_cde栏中有真实的数字代表年份会更有效率; 图像中明显的错误通知以及值的左alignment似乎表明它们是伪装成数字的文本。

在下面的示例数据中,我强制将yr_cde列转换为看起来像数字年的文本值(通过它们的错误记号和左alignment显而易见),并将trm_cde列在真正的数字和真正的文本之间分开。

每个ID和types列的最早年份/术语的第一个数据行(我的示例图像中的F3)中,使用此数组公式2。

 =IFERROR( LEFT(AGGREGATE(15, 7, IF(ISTEXT([trm_cde]), [yr_cde]&MID([trm_cde], 2, 9), [yr_cde]&[trm_cde])/(([id_num]=[@[id_num]])*([type consoldiation]=[@[type consoldiation]])), 1), 4)& " ("&IF(ISTEXT([@[trm_cde]]), LEFT([@[trm_cde]], 1), "")& MID(AGGREGATE(15, 7, IF(ISTEXT([trm_cde]), [yr_cde]& MID([trm_cde], 2, 9), [yr_cde]&[trm_cde])/(([id_num]=[@[id_num]])*([type consoldiation]=[@[type consoldiation]])), 1), 5, 9) &")", "") 

我已经使用了AGGREGATE³函数来确定小组合值。 您还应该能够通过调整k参数来返回第二个或第三个最低值(请参阅示例图像中的G列)。 检查链接文档的其他选项。

minimum_text_values
文本和数字组合的最小值


¹NUMBERVALUEfunction是在Excel 2013中引入的,它在早期版本中不可用。

² arrays公式需要用Ctrl + Shift + Enter 来确定。 一旦正确input第一个单元格,就可以像其他任何公式一样向下或向右填充或复制它们。 尝试和减less您的全列引用范围更接近代表实际数据的范围。 数组公式将计算周期对数化,所以最好将参考范围缩小到最小。 有关更多信息,请参阅数组公式的示例 。

Excel 2010引入了AGGREGATE函数 。它在早期版本中不可用。