混合 numeric/alphabetic 值的 MIN 函数

MIN function on mixed numeric/alphabetic values

我有一个 table 学生记录,可以识别他们入学的几个方面,包括他们的 ID、入学年份、入学学期、学生类型等。

下面的公式位于 table 的一列中,可以完美地根据学生的 ID 和类型组合确定学生的最短学年(以及最短学年的最短学期)。但它只有在术语值是数字时才能完美工作。有些术语是 letter/number 组合,例如 "A1"、"A2"、"A3"、"J1"、"J2"、"J3"、"M1"、"M2"、"M3" 并且对于这些行,代码 return 是 #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/match 公式:=INDEX([trm_cde],MATCH(MIN(CODE([trm_cde])),CODE([trm_cde]),0)) 将 return table 中所有记录的项的最小值,但是经过多次尝试,我无法弄清楚如何将它合并到我需要通过 ID、类型和最小年份标准来确定最小值的公式中。

使用这个:

=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-Enter[=31确认=]

刚刚意识到这只有在 table 按 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-Enter[=31确认=]

我相信您可能误解了 trm_cde 列中 NUMBERVALUE¹ function. Its intended use is to translate text-that-looks-like-a-number in a regional number format (e.g. 2.500,27) to a raw numerical format that can be dealt with mathematically. It is not intended to try and interpret a strictly text value such as J1 into a numerical value. This is the source of your #VALUE! 错误的目的。在 yr_cde 列上使用 NUMBERVALUE 是不必要的,因为不需要区域转换。在 yr_cde 列中简单地使用代表年份的真实数字会更有效;图像中明显的错误通知以及值的左对齐似乎表明它们是伪装成数字的文本。

在下面的示例数据中,我将 yr_cde 列强制转换为看起来像数字年份的文本值(通过它们的错误符号和左对齐可以看出)并将 trm_cde 列分为真实数字和真实文本。

最早year/term每个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 to determine the SMALLest 组合值。您还应该能够通过调整 k 参数 return 第二或第三低(参见示例图像中的 G 列)。检查其他选项的链接文档。


文本和数字组合的最小值


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

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

³ AGGREGATE function 是在 Excel 2010 中引入的。它在早期版本中不可用。