VBA - Condición si número decimal entonces...

Resuelto
zivodul8 Mensajes publicados 248 Estado Miembro -  
blux Mensajes publicados 5032 Fecha de registro   Estado Moderador Última intervención   -
Hola,

Mi problema es simple: busco un fragmento de código VBA que determine si un número tiene punto decimal o no. Ejemplo:

Si n = 3.22 entonces alinear a la derecha. Si no (n = 3) alinear a la izquierda. Fin si

7 respuestas

  1. beber005
     
    Hola,

    Lo que te aconsejo hacer es

    SI tu cadena contiene un carácter especial aquí un punto ENTONCES
    alinear a la derecha
    SINO
    alinear a la izquierda
    FIN Si

    En realidad, en cuanto en tu cadena encuentres el elemento punto deduces que es un número con coma
    0
  2. zivodul8 Mensajes publicados 248 Estado Miembro 22
     
    No he conseguido hacer un:

    Application.WorksheetFunction.Search


    ¿No hay otros métodos?
    0
  3. blux Mensajes publicados 5032 Fecha de registro   Estado Moderador Última intervención   3 455
     
    Hola,

    ¿puedes hacer esto con la función int(número) que devuelve la parte entera de un número?

    Si es igual al propio número, es que no hay coma decimal.

    IF INT(número) = número THEN ... END IF


    --
    A+ Blux
     "Los idiotas, eso se atreven a todo. Es incluso con eso que se les reconoce"
    0
  4. zivodul8 Mensajes publicados 248 Estado Miembro 22
     
    Arff, ¡eso es tan estúpido! Voy a intentarlo, gracias ;-)
    0
    1. blux Mensajes publicados 5032 Fecha de registro   Estado Moderador Última intervención   3 455
       
      Toma en su lugar FIX(nombre), esta función no redondea.
      Te evitará probar si 3 = 2, para el caso en que tengas 2,999999...
      0
    2. zivodul8 Mensajes publicados 248 Estado Miembro 22
       
      Gracias Blux, casi caí en la trampa.
      0
  5. zivodul8 Mensajes publicados 248 Estado Miembro 22
     
    Tengo otro (rápido) problema. Busco determinar el número de la fila donde en una columna, dos celdas vacías se siguen verticalmente. Esto es lo que hice pero no funciona:
     Sub NbLigne() 
     Dim NbLigne, i As Integer 
     i = 1 
     Do While Range("A" & i).Value <> "" And Range("A" & i + 1).Value <> "" 
      NbLigne = i 
      i = i + 1 
     Loop 
     MsgBox NbLigne 
     End Sub
    0
  6. zivodul8 Mensajes publicados 248 Estado Miembro 22
     
    He resuelto, acabo de descubrir que en VBA el Y se traducía por or y no por and!
    0
    1. Ctesias Mensajes publicados 786 Estado Miembro 36
       
      no es cierto
      0
    2. blux Mensajes publicados 5032 Fecha de registro   Estado Moderador Última intervención   3 455
       
      No es VBA, es lógica booleana, pero solo debido a que tienes <>; si tuvieras =, te haría falta poner un AND.

      Las explicaciones aquí:

      https://forums.commentcamarche.net/forum/affich-16025052-shell-condition

      Y como digo, es una cosa vieja como los ordenadores ;-)
      0
    3. zivodul8 Mensajes publicados 248 Estado Miembro 22
       
      Hmm, para meditar...

      Gracias nuevamente, no volveré a cometer ese error :)
      0
  7. Ctesias Mensajes publicados 786 Estado Miembro 36
     
    Lo que puedes hacer es:

    Dim nombre1 as integer Dim nombre2 as string Nombre1=Int(nombre2) If nombre2%nombre1 = 0 then desplazar a la izquierda Sinon desplazar a la derecha end if
    0
    1. zivodul8 Mensajes publicados 248 Estado Miembro 22
       
      También ;-)
      0
    2. blux Mensajes publicados 5032 Fecha de registro   Estado Moderador Última intervención   3 455
       
      No estoy convencido de que se pueda dividir una cadena entre un número.
      0
    3. Ctesias Mensajes publicados 786 Estado Miembro 36
       
      Hmm... Lo puse rápido así. Pero ya no recuerdo si hay una posibilidad de inicializar números con cifras decimales.
      0
    4. blux Mensajes publicados 5032 Fecha de registro   Estado Moderador Última intervención   3 455
       
      a = 9999.22
      0