A ver, el problema que tienes es que encuentras una solución pero sigues buscando soluciones, es decir, tienes que parar de buscar soluciones en cuanto encuentras la primera y no modificar multiploDeNueve más.
encontrado = falso
...
si resultado es múltiplo de nueve y NO encontrado
encontrado = verdad
multiploDeNueve = resultado
finSi
...
Tiene el problema de que recorres el bucle entero, y esto no tiene sentido, se sabe que el primer múltiplo de 9 va a estar entre inicio+1 e inicio+10.
...
si resultado es múltiplo de nueve
multiploDeNueve = resultado
break
finSi
...
Así terminas en cuanto encuentras una solución. No sé cómo es el break en Visual Basic, si lo hay (que me imagino que sí).
Puedes mantener la variable "encontrado" para devolver un 0 si no hay ningún múltiplo de 9 entre inicio y fin.
Opciones hay muchas, una sin bucles:
si inicio+1 mod 9 = 0 entonces
multiploDeNueve = inicio+1
si_no
multiploDeNueve = inicio+1 + 9 - (inicio+1) mod 9
si multiploDeNueve >= fin entonces multiploDeNueve = 0; finSi
finSi
Otra, que viene a ser la misma que la anterior:
multiploDeNueve = inicio+1
si multiploDeNueve mod 9 != 0 entonces
multiploDeNueve += 9 - (inicio+1) mod 9
si multiploDeNueve >= fin entonces multiploDeNueve = 0; finSi
finSi
Y seguro que las hay más retorcidas.
Se nota que me aburro a estas horas ^^
Edito: ya te han respondido pero ya que he escrito todo el tostón, lo envío
Vuelvo a editar:
david_keen escribió:puedes hacer un truquito
If resultado Mod 9 = 0 Then
multiplodenueve = resultado
resultado = fin
End If
¿Así sales del for? Pregunto, que no lo sé. ¿No peta Visual Basic si en mitad de un bucle modificas la variable de iteración? Aunque dejara modificar la variable, no veo cómo termina el for, en la siguiente iteración modificaría el valor de resultado al siguiente valor que tocaba.
Al final he buscado el break para Visual Basic y sí existe, sólo tendría que añadir la sentencia "Exit For" donde yo he puesto "break".