none
Macro En Excel Para Obtener Multiplo Superior RRS feed

  • Pregunta

  • Muy Buenos dias

    Quisiera su apoyo para realizar la siguiente macro, la situacion es la siguiente:

    Tengo las siguientes dos celdas:
    La A1 en donde tengo un valor fijo, por ejemplo 22
    y la A2 en donde deseo ingresar un valor y que al momento de darle enter o de cambiarme con las flechas a cualquier otra celda me ponga el Multiplo Superior de la celda A1. Por ejemplo si tecleo 10 en la celda A2 este debera ponerme 22 si tecleo 23 este debera ponerme 44, etc.

    La siguiente macro si me funciona, pero el resultado me la pone en la celda A3,


    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Range("A2").Value > 0 Then
            Range("A3").Formula = "=CEILING(A2,A1)"
        End If
    End Sub

    Pero al sustituir la celda A3, por A2, la macro no funciona.

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Range("A2").Value > 0 Then
            Range("A2").Formula = "=CEILING(A2,A1)"
        End If
    End Sub


    Cabe resaltar que en otra macro que hice si pude hacer que el valor de una celda cambie al momento de cambiarme de la misma celda, este es el ejemplo:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Range("B1").Value
            Case 1 To 10
            Range("B1") = 5
            Case 11 To 20
            Range("B1") = 15
            Case 21 To 30
            Range("B1") = 25
        End Select
    End Sub


    Lo que hace esta macro es que al capturar un numero en la celda B1 me la muestra un valor x, dependiendo del rango del numero capturado, esto me lo hace inmediatamente al finalizar de ingresar el valor y cambiarme de celda.

    De antemano les agradezco la ayuda

    Alejandro

    viernes, 22 de enero de 2010 18:55

Respuestas

  • Lo que podrias hacer una idea, es que en este codigo:

     If Range("A2").Value > 0 Then
            Range("A3").Formula = "=CEILING(A2,A1)"
        End If

    almacenar una variable es decir :

    valor=range("a3").value

    depues chancar la celda A2 y colocar:

    range("a2")=valor

    y por ultimo despues del endif borrar lo que tenga la celda A3:

    range("a3")=""

    Pruebalo saludos.


    Trainer MS Office 2007
    • Marcado como respuesta Ismael Borche martes, 5 de abril de 2011 21:29
    viernes, 22 de enero de 2010 19:41

Todas las respuestas

  • Lo que podrias hacer una idea, es que en este codigo:

     If Range("A2").Value > 0 Then
            Range("A3").Formula = "=CEILING(A2,A1)"
        End If

    almacenar una variable es decir :

    valor=range("a3").value

    depues chancar la celda A2 y colocar:

    range("a2")=valor

    y por ultimo despues del endif borrar lo que tenga la celda A3:

    range("a3")=""

    Pruebalo saludos.


    Trainer MS Office 2007
    • Marcado como respuesta Ismael Borche martes, 5 de abril de 2011 21:29
    viernes, 22 de enero de 2010 19:41
  • Gracias Omar

    En Efecto al almacenar el valor en una variabla temporal me funciono.

    = )

    Ahora, y aprovechando tu apoyo y conocimientos q me recomendarias hacer si yo tengo toda una columna por ejemplo la columna A con valores fijos (con mas de 100 celdas con valores) y que cuando yo ingrese algun valor en cualquier celda de la columna B me ponga su Multiplo Superior de su celda izquierda correspondiente.

    Nota: No precisamente tendran que escribirse todos los valores de la columna B.

    Por lo que veo es el mismo script pero como hacer que ese script se repita tantas veces o que funcione cuando yo modifique alguna celda de la columna B.





    Saludos

    Alejandro
    • Editado ARE82 viernes, 22 de enero de 2010 23:29
    viernes, 22 de enero de 2010 22:03
  • Hola Omar

    Mira haye tbm esta forma de plantear la solucion del primer problema te la dejo o a dejo para cualquier otra persona en un futuro

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Range("B1").Value > 0 Then
            Range("B1") = Application.Ceiling(Range("B1"), Range("A1"))
        End If
    End Sub


    Si te das cuenta no ingrese la formula despeus del If (tercer renglon) sino ingrese directamente el resultado

    = ) asi evite el crear la variable



    Saludos

    AR
    viernes, 22 de enero de 2010 23:27
  • Pues podrias realiazr a traves de un bucle usando por ejemplo FOR que te permita ir procediendo en las 100 celdas que contengan los valores.

    Saludos.
    Trainer MS Office 2007
    sábado, 23 de enero de 2010 0:10