Función ALEATORIO excluyendo rangos

La función que muestro a continuación da como resultado un número aleatorio entre dos números sin tener en cuenta un intervalo especificado. Como no sabía cómo llamarla, he optado por ALEATORIO2.

Imagina que necesitas un número aleatorio entre 1 y 100, que no debe mostrar como resultado, un valor comprendido entre 25 y 50.

La sintaxis es la siguiente:

=ALEATORIO2(inferior;superior;número inferior rango excluido;número superior rango excluido)

Atención! Todos los argumentos son obligatorios

En primer lugar la función valida los argumentos para comprobar que se han introducido en el orden correcto.

Luego, mediante un bucle, va creando números enteros aleatorios entre el valor inferior y el superior hasta que da con uno que no está comprendido en el rango de números excluidos.

Este es el código resultante:

 

Function ALEATORIO2(primer As Integer, ultimo As Integer, no1 As _
    Integer, no2 As Integer)

    'Valida los datos para que en el cálculo no aparezcan errores

    If primer >= ultimo Or primer > no1 Or primer > no2 Or no1 > no2 _
    Or no1 > ultimo Or no2 > ultimo Then
        a = MsgBox("Por favor, revisa los argumentos de la función", , _
    "Error en la función")
        Exit Function
    End If

    ' Calcula el entero aleatorio mientras no se encuentre entre no1 y no2

    Do
        res = Int((ultimo - primer + 1) * Rnd() + primer)
    Loop While res >= no1 And res <= no2

    ALEATORIO2 = res

End Function

¿Te ha sido útil esta función?