Saludos, Jota.
He creado una simple función para obtener el resultado que deseabas inspirándome en las respuestas anteriores a este hilo.
La he llamado RoundAdv (Round Advanced) puesto que admite un parámetro más que la tradicional Round: permite seleccionar el valor de la cifra que determina el redondeo (por defecto 5), es decir, si el número es el 10,5 devuelve 11 porque la cifra que determina el redondeo es igual o mayor a 5.
Aquí os la doy. Como veréis la función es bastante simple (tan solo 2 líneas de código), pero está comentada exhaustivamente:
'-----------------------------------------------
'CÓDIGO
'-----------------------------------------------
'Zoto - www.lawebdelprogramador.com
'Descripción: Función de Redondeo Avanzada.
'Esta función toma como parámetros:
'-NumRound-> Double que contiene el número a redondear
'-NumDigitsAfterDecimal-> Byte que contiene el número de
'dígitos decimales que deben conservarse al redondear.
'Por ejemplo, si el número a redondear es 12,456
'y este parámetro (NumDigitsAfterDecimal) es 2,
'entonces se redondea a 12,46 (si el tercer parámetro,
'que se comenta a continuación, es igual o mayor que 6)
'-CiphreAdd-> Byte que contiene la cifra que determina el redondeo (si
'la cifra decimal que ocupa la posterior posición a la
'determinada por NumDigitsAfterDecimal es igual o mayor
'que este parámetro (CiphreAdd) se añade una unidad
'a la cifra que le precede.
'Por ejemplo, si el número a redondear es 12,456 ,
'NumDigitsAfterDecimal es 2 y este parámetro (CiphreAdd) es
'5 (valor por defecto), entonces se comprueba que la siguiente cifra decimal a
'la indicada en NumDigitsAfterDecimal (que es la tercera, ya
'que NumDigitsAfterDecimal apunta a la segunda)
'es igual o superior a CiphreAdd y, consecuentemente, se añade
'una unidad a la cifra anterior: 12,456 -> 12,46
Function RoundAdv(ByVal NumRound As Double, Optional NumDigitsAfterDecimal As Byte, Optional CiphreAdd As Byte = 5) As Double
NumRound = NumRound * 10 ^ NumDigitsAfterDecimal
RoundAdv = (Int(NumRound) + Abs(CiphreAdd / 10 <= NumRound - Int(NumRound))) / 10 ^ NumDigitsAfterDecimal
End Function
'----------------------------------------------------------------------------------
'Ejemplo de uso:
'Dim n As Double 'Número a redondear
'Dim d As Byte 'Cifras decimales a incluir
'Dim c As Byte 'Valor de la cifra a tomar como partida de redondeo (por defecto 5)
'n = CDbl(InputBox("Introduce el número a redondear:", "RoundAdv", "12,456"))
'd = CInt(InputBox("Introduce el número de dígitos decimales a partir de los cuales se debe redondar (p.e. para redondear 2,456 -> a 2,45 / 2,46 el número debería ser 2)", "RoundAdv", "2"))
'c = CInt(InputBox("Introduce el número que debe tener la cifra que determine el redondeo (si no especifica es 5, es decir, el número 2,456 se redondea a 2,46 (siendo el parámetro anterior 2) por que 6 es igual o mayor que la cifra 5 (valor por defecto)", "RoundAdv", "5"))
'MsgBox "Número redondeado: " & RoundAdv(n, d, c), , "RoundAdv-Calculado"
'----------------------------------------------------------------------------------
Espero que te sirva a ti y a otros (y espero no haberme pasado con los comentarios... ;D)
Hasta pronto,
Zoto