确定“最高自”或“最低自”(Microsoft Excel)
亚历克斯定期分析最新的建筑行业数据,并需要撰写有关该数据的文章。他经常需要强调一些新数据,例如“工业建筑的建造量是自2007年8月以来的最低水平”。亚历克斯(Alex)想知道是否有一种方法可以自动进行这种突出显示。如果A列包含月份和年份,B列包含这些时间段的值,则Alex希望C列中的公式表示“此值是自2007年4月以来的最高值”或“此值是2004年11月以来的最低值”。
假设列A中列出的月份和年份确实是Excel日期值(而不是文本),则可以轻松创建一个公式以返回所需的信息。如果您的第1行有列标题,请在单元格C2中输入以下内容:
=IF(ROW(B2)=2,"",IF(B2>MAX($B$1:B1), "this value is the highest since " & TEXT(INDEX($A$1:A1,MATCH(MAX( $B$1:B1),$B$1:B1,0)), "mmmm yyyy"), IF(B2<MIN($B$1:B1), "this value is the lowest since " & TEXT(INDEX($A$1:A1, MATCH(MIN($B$1:B1),$B$1:B1,0)), "mmmm yyyy"),"")))
请记住,这是一个公式,应全部输入一行。您可以根据需要在C列中向下复制该公式,并应提供所需的信息。
|仅在B列中的值大于或小于B列中所有前述值的最小值时才在C列中进行标记。
如果您的工作表中有很多数据,您可能会注意到该公式会导致重新计算时间较长。如果是这种情况,那么您可能要考虑使用将进行所需分析并提供适当信息的宏。下面的宏通过B列中的信息向后看,并在C列和D列中提供“自最低以来”和“自最高以来”的结果。
Sub FindHiLow() Dim orig_cell As Range Dim orig_val As Integer Dim orig_row As Integer Dim rownum As Integer Dim newcell As Range Dim new_val As Integer Dim lowrow As Integer Dim hirow As Integer Set orig_cell = ActiveCell orig_row = ActiveCell.Row orig_val = orig_cell.Value ' find lowest lowrow = 0 For rownum = orig_cell.Row - 1 To 1 Step -1 Set newcell = Cells(rownum, 2) new_val = newcell.Value If orig_val >= new_val Then lowrow = rownum Exit For End If Next If lowrow = 0 Then lowrow = 1 Cells(orig_row, 3).Value = "Lowest since " & Cells(lowrow, 1) ' find highest hirow = 0 For rownum = orig_cell.Row - 1 To 1 Step -1 Set newcell = Cells(rownum, 2) new_val = newcell.Value If orig_val <= new_val Then hirow = rownum Exit For End If Next If hirow = 0 Then hirow = 1 Cells(orig_row, 4).Value = "Highest since " & Cells(hirow, 1) End Sub
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(3138)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本:
链接:/ excelribbon-Determining_Highest_Since_or_Lowest_Since [确定“最高自”或“最低自”]。