A continuación vamos a ver un programa en Excel VBA que encuentra el segundo valor más alto.

Situación:

Find Second Highest Value in Excel VBA

  1. En primer lugar, declaramos dos objetos Range y dos variables de tipo doble. Llamamos a la gama de objetos RNG y celular. Una variable doble que llamamos highestValue, y una doble variable que llaman secondHighestValue.

Dim rng As Range, cell As Range

Dim highestValue As Double, secondHighestValue As Double
  1. inicializar el generador de números aleatorios objeto Range con la gama seleccionada y las dos variables dobles con valor 0.

Set rng = Selection

highestValue = 0

secondHighestValue = 0
  1. En primer lugar, queremos encontrar el valor más alto. Queremos comprobar cada celda de un rango seleccionado al azar (este rango puede ser de cualquier tamaño). En Excel VBA, puede utilizar el siguiente bucle For Each para esto. Añadir las siguientes líneas de código:

'Find Highest Value

For Each cell In rng

Next cell

Nota: RNG y la célula se eligen al azar aquí, se puede usar cualquier nombre.

Recuerde hacer referencia a estos nombres en el resto de su código. La línea verde es un comentario y sólo se agrega aquí para proporcionar información sobre este trozo de código.

  1. Comprobamos cada célula en este rango. Si es mayor que highestValue, se escribe el valor de la variable de highestValue. Agregue la siguiente línea de código para el bucle.

If cell.Value > highestValue Then highestValue = cell.Value

Nota: el primer valor es siempre mayor que highestValue debido a que el valor inicial de highestValue es 0.

  1. En segundo lugar, queremos encontrar el segundo valor más alto. Añadimos otro bucle For Each Siguiente.

'Find Second Highest Value

For Each cell In rng

Next cell
  1. Comprobamos cada celda en el rango seleccionado de nuevo. Si es mayor que secondHighestValue e inferior a highestValue, se escribe el valor de la variable de secondHighestValue. Agregue la siguiente línea de código para el bucle.

If cell.Value > secondHighestValue And cell.Value < highestValue Then secondHighestValue = cell.Value
  1. Por último, se muestra el segundo valor más alto usando un MsgBox.

MsgBox "Second Highest Value is " & secondHighestValue
  1. Coloque la macro en un botón de comando, seleccione los números, y haga clic en el botón de comando.

Resultado:

Find Second Highest Value Result