MIN函数对混合数字/字母值

时间:2015-12-08 15:45:27

标签: excel excel-formula excel-2013

我有一张包含学生记录的表格,可以识别他们注册的几个方面,包括他们的身份,注册年份,注册期限,学生类型等。

下面的公式位于表格的一列中,可以完美地识别学生的身份和类型组合的最小年份(以及最低年度的最低学期)。但它只在术语值为数字时才能正常工作。一些术语是字母/数字组合,例如“A1”,“A2”,“A3”,“J1”,“J2”,“J3”,“M1”,“M2”,“M3”以及这些行,代码返回一个#VALUE!错误。

Record Snapshot with Error

=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)),它将返回表中所有记录的最小值,但经过多次尝试,我无法弄清楚如何合并它在公式中,我需要通过id,type和minimum year标准来确定最小值。

2 个答案:

答案 0 :(得分:3)

使用此:

=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))&")"

这是一个数组公式,因此需要使用 Ctrl - Shift - 输入

进行确认

刚刚意识到这只有在表格按if_num,yr_code,trm_cde排序时才有效。

编辑2:

无论排序顺序如何,此公式都可以使用:

=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))&")"

这是一个数组公式,因此需要使用 Ctrl - Shift - 输入

进行确认

答案 1 :(得分:2)

我相信你可能误解了NUMBERVALUE¹ function的目的。其预期用途是将区域数字格式(例如 2.500,27 )中的文本看起来像数字转换为可以数学处理的原始数字格式。它无意尝试将严格的文本值(例如 J1 )解释为数值。这是 trm_cde 列中#VALUE!错误的来源。在 yr_cde 列上使用NUMBERVALUE是不必要的,因为不需要区域翻译。简单地用真实数字表示yr_cde列中的年份会更有效率;图像中显示的错误通知以及值的左对齐似乎表明它们是伪装成数字的文本。

在下面的示例数据中,我强制将 yr_cde 列强制为看起来像数年的文本值(通过错误符号和左对齐来表示)并离开 trm_cde 列在真数和真实文本之间分割。

最早年份/每个ID和类型列的第一个数据行(我的示例图片中的F3)中,使用此数组公式²。

=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³ function来确定SMALL \ test合并值。您还应该能够通过调整 k 参数返回第二个或第三个最低值(请参见示例图像中的G列)。检查链接的文档以获取其他选项。

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

¹ {2013}引入了NUMBERVALUE function。它在早期版本中不可用。

²数组公式需要使用 Ctrl + Shift + Enter↵完成。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas

³ Excel 2010引入了AGGREGATE function。早期版本无法使用它。