jueves, 6 de mayo de 2010

Convertir positivos en negativos dada una condición.

Hace un par de días me llegó al correo un problema curioso, y aunque me considero un mero aprendiz en temas de programación VBA, sin embargo, decidí analizar la consulta del lector. En ella pedía ayuda para facilitar la introducción de datos en una plantilla, distinguiendo valores positivos o negativos, condicionando el signo del número al valor de otra celda.
Describía el usuario:

...Supongamos que en la columna A de una hoja tengo los siguientes titulos de filas:
A2: Pagos por intereses, A3: Cobros por dividendos, A4: Pagos a proveedores, A5: Cobros por Vtas Contado, A6: Cobros por Vtas. Cta.Cte., A7:Pagos por prestamos

En la fila 1 tengo los siguientes titulos de columnas:
B1: Enero, C1: Febrero, D1: Marzo, E1: Abril

Luego las celdas del rango B2:E7 se cargaran con datos numericos respectivamente

Hasta aca todo bien, pero si ven el cuadro que se armo tenemos 3 celdas que contienen la palabra "pagos" y tres celdas que contienen la palabra "cobros". Lo que quiero hacer es que a medida que se carguen los datos vayan quedando como positivos o negativos segun lo que indiquen las celdas A2, A3, A4, A5, A6 y A7 en su interior. La formula o macro deberá detectar, identificar o buscar la palabra "pagos" dentro de la frase de la celda A2 y si es cierto entonces el numero que se cargó en la celda B2 transformarlo en negativo. Si dentro de la celda no se encuentra la palabra "pagos" entonces dejarlo como positivo...



Para facilitar el trabajo del desarrollo de la macro, incluiremos una nueva columna en la que nos indique si el concepto de las filas corresponde a pagos 'P' o a cobros 'C':


Desarrollaré unas líneas de VBA donde se restrinja, condicionado al valor de las celdas de la columna A, el valor introducido ('P' o 'C').

Para ello abrimos el Editor de Visual Basic(Alt+F11), y nos dirigimos a la ventana del Explorador de proyectos, haciendo click en la Hoja donde queramos incluir esta funcionalidad, en mi caso la Hoja1, y en la ventana de código de esta Hoja escribiremos:

'para convertir números positivos en negativos automáticamente
Private Sub Worksheet_change(ByVal Target As Range)
Static celda_activa As Integer
On Error Resume Next
If
Cells(Target.Row, 1) = "P" And Cells(Target.Row, Target.Column).Value > 0 Then
Cells(Target.Row, Target.Column).Value =
Cells(Target.Row,Target.Column).Formula * (-1)
End If
End Sub



Con lo que he conseguido lo que se pretendía, esto es, cada vez que se introudzca un valor en la Hoja1 y en la primera columna exista un valor igual a 'P', el número se convertirá en negativo.

12 comentarios:

  1. Muchas gracias excelforo por haber volcado parte de su tiempo en responder a esta consulta.
    El sitio es excelente, sigan asi.
    Saludos, Jesus

    ResponderEliminar
  2. Esta pagina es de lo mejor (: SOlo les faltaria una cosa.. si pudieran poner ejercicios para nosostros practicar & asi para que veamos en que nos esquivocariamos.. Bueeno espero qe puedan hacer eso :/ porque estara super(: bueeno se cuiidan & felicitaciones para quien hizo esta grandiosa pag.

    ResponderEliminar
  3. Hola Patty..
    aunque no es la finalidad del blog, lo pensaré y veré en qué forma puedo implantarlo.
    Saludos y gracias por seguirme...

    ResponderEliminar
  4. Hola amigos del foro, fijense tengo el siguiente problema, todos los dias tomo unos datos de tablas pivotes, luego de estar en la tabla hago una serie de filtros, pero quiero tener una macro que me haga esos filtros y mas que eso que lo haga en el dia correspondiente ya que dichas tablas se actualizan todos los dias.. es decir quiero que un dia pinche el 1, otro el 2 etc..

    ResponderEliminar
  5. Hola,
    quizá lo más sencillo es que uses el Asistente de macros, y modifiques un poco el código donde aparezcan los 'Criterios' de filtro.
    Con los datos que aportas no puedo decirte mucho más.
    Slds

    ResponderEliminar
  6. Como pasar numeros negativos a positivos en una hoja de excel?

    ResponderEliminar
    Respuestas
    1. Hola,
      el proceso más sencillo sería multiplicar todos ellos por -1, mediante el Pegado Especial > Operación > Multiplicar.
      Primero en una celda aparte escribes -1, luego la seleccionas y copias, finalmente haces el pegado especial como te indicaba...
      Otra forma es con macros, como puedes ver en esta misma entrada.
      Slds

      Eliminar
  7. muy buenos aportes, yo cambiaria algo q es muy simple:
    'para convertir números positivos en negativos automáticamente
    Private Sub Worksheet_change(ByVal Target As Range)

    On Error Resume Next
    If Cells(Target.Row, 1) = "P" And target.Value > 0 Then
    range(target.address) = target.value * (-1)

    End If
    End Sub

    'saludos,

    ResponderEliminar
    Respuestas
    1. Muchas gracias,
      por el comentario y por el aporte!!!
      Slds

      Eliminar
    2. Buenos días, gracias por el aporte, estoy intentando encontrar el código para este problema hace meses. Copié el mismo y modifiqué el parámetro a "P" para que coincida pero mi problema radica en que mis valores estan en la columna "H5:H3002" y los parámetros en "O5:O3002". Por otro lado, la hoja contiene mas columnas con valores que no necesito que se modifiquen.
      Agradecería su ayuda. Gracias, Damian.-

      Eliminar
    3. Hola
      tendrás que generar un procedimiento que recorra la columna H con tu condición y una vez evaluada convierta la columna O
      Sub test()
      for each celda in range("H5:H3002")
      if celda.value="P" and cells(celda.row,"O").value>0 then
      cells(celda.row,"O").value=cells(celda.row,"O").value*-1
      end if
      next celda
      End sub

      Saludos

      Eliminar
    4. Muhcas gracias, logré amoldar tu código y me has ayudado con un problema importante. Hasta la próxima!

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.