Alex analiza habitualmente los datos más recientes de la industria de la construcción y necesita escribir artículos sobre los datos. Con frecuencia necesita destacar algún dato nuevo, como «la construcción de edificios industriales fue la más baja desde agosto de 2007». Alex se preguntó si habría alguna forma de automatizar este tipo de resaltado; si la columna A contiene el mes y el año y la columna B contiene los valores para esos períodos, Alex querría una fórmula en la columna C que indique «este valor es el más alto desde abril de 2007» o «este valor es el más bajo desde noviembre de 2004».

Suponiendo que el mes y el año enumerados en la columna A es realmente un valor de fecha de Excel (y no texto), puede crear fácilmente una fórmula para devolver la información deseada. Si tiene la fila 1 ocupada con encabezados para sus columnas, ingrese lo siguiente en la celda 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"),"")))

Recuerde que esta es una fórmula única y debe ingresarse en una sola línea. Puede copiar la fórmula hacia abajo tantas filas como sea necesario en la columna C, y debería proporcionar la información deseada. Solo hace una notación en la columna C si el valor en la columna B es mayor que el máximo o menor que el mínimo de todos los valores anteriores en la columna B.

Si tiene bastantes datos en su hoja de trabajo, puede notar que la fórmula da como resultado tiempos de recálculo prolongados. Si este es el caso, es posible que desee considerar el uso de una macro que hará el análisis deseado y proporcionará la información adecuada. La siguiente macro proporciona una mirada hacia atrás a través de la información en la columna B y proporciona un resultado de «menor desde» y «mayor desde» en las columnas C y 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

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (3138) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:

link: / excelribbon-Determining_Highest_Since_or_Lowest_Since [Determinar" Mayor desde "o" Mínimo desde "].