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:
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:
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.
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.
Muchas gracias excelforo por haber volcado parte de su tiempo en responder a esta consulta.
ResponderEliminarEl sitio es excelente, sigan asi.
Saludos, Jesus
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.
ResponderEliminarHola Patty..
ResponderEliminaraunque no es la finalidad del blog, lo pensaré y veré en qué forma puedo implantarlo.
Saludos y gracias por seguirme...
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..
ResponderEliminarHola,
ResponderEliminarquizá 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
Como pasar numeros negativos a positivos en una hoja de excel?
ResponderEliminarHola,
Eliminarel 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
muy buenos aportes, yo cambiaria algo q es muy simple:
ResponderEliminar'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,
Muchas gracias,
Eliminarpor el comentario y por el aporte!!!
Slds
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.
EliminarAgradecería su ayuda. Gracias, Damian.-
Hola
Eliminartendrá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
Muhcas gracias, logré amoldar tu código y me has ayudado con un problema importante. Hasta la próxima!
Eliminar