Hola Waldir,
prueba formateando los valores con 0 para que así el sorteo tenga el efecto que deseas. La lista ordena los valores según su código ASCII y no según su valor numérico. Si formateas los valores con 0 a la izquierda, se ordenarán correctamente.
En el ejemplo que comentas:
20
100
40
50
Los valores, formateados y ordenados quedarían:
020
040
050
100
Para formatear los valores con 0 deberás usar la función Format de Visual Basic. El número total de 0 deberás especificarlo según el máximo valor. En el ejemplo anterior he establecido 3 como número máximo de cifras. Pongamos por caso que el máximo número de cifras que puede tener un valor es 10.
Mira el código para formatear un valor:
Private Const TOTAL_ZEROS As Integer = 10 'Máximo número de 0
Dim Value As Double
Dim ResultValue As String
Value = 20 'Valor a formatear
ResultValue = Format(CStr(Value), String(TOTAL_ZEROS, "0")) 'Formateamos el valor con 10 ceros.
MsgBox ResultValue 'Lo mostramos para ver el resultado.
Esto es lo que deberías hacer tu con todos los valores numéricos antes de listarlos para que se ordenen según su valor numérico.
Espero que haya sido claro y esto te ayude a solucionar tu problema.
Saludos,
Zoto