Hola a todos.
Llevo varios post escritos en los que el tema a tratar son las consultas de los lectores. Creo que esto es muy importante, dado que son casos totalmente reales y seguro que se dan más frecuentemente.
Para el caso de hoy voy a presentar un pequeño proceso que extrae los saldos positivos y negativos de los movimientos de una cuenta contable. Esta consulta me la formuló una lectora, que decía así:
Buenos días:
Tengo una relación de cuentas y movimientos por fechas y necesitaría poner los importes negativos en una columna y los positivos en otra. Y también que aparezca el sumatorio de los saldos al final de cada columna, ¿podrías ayudarme?. Te envío un archivo de prueba.
Muchas gracias.
Para hacernos una idea de los datos, he confeccionado un pequeño ejemplo con datos generados aleatoriamente, estos serían los movimientos, las fechas y el resto de la información:
Para poder realizar la consulta que nos plantea nuestra compañera existen varios métodos, podemos usar un filtro avanzado (pero en VBA), podemos usar una consulta SQL usando ADO, o podemos usar un bucle que vaya acumulando los datos en la columna específica. Para este ejercicio usaré el tercer método, y en concreto una instrucción For-Next (podríamos utilizar cualquier otra estructura de bucle).
La macro que vamos a utilizar es la siguiente:
Sub extraer_saldos()
'Declaramos las variables a utilizar
Dim i As Integer, n As Integer, contador As Integer
'Desactivamos parpadeo de pantalla
Application.ScreenUpdating = False
'Hacemos referencia a la hoja Datos
With Sheets("DATOS")
'Cuando ejectemos la macro, limpiamos el área seleccionada si contiene información
fin = Application.CountA(.Range("A:A"))
If fin > 1 Then .Range("F2:I" & fin, "K2:N" & fin).Clear
'Si no marcamos el mes,lanzamos un mensaje de advertencia y paramos salimos del proceso
nMes = .Cells(2, 16).Value
If nMes = vbNullString Then
MsgBox ("INDICA EL MES (EN NÚMERO) PARA EXTRAER LA INFORMACIÓN"), vbExclamation
Exit Sub
End If
'iniciamos el bucle para pasar los datos con signo negativo a las columnas especificadas
n = 2
For i = 2 To fin
contador = 0
If .Cells(i, 4) < 0 And Month(.Cells(i, 2)) = nMes Then contador = contador + 1
If contador = 1 Then
.Range("F" & n) = .Cells(i, 1).Value
.Range("G" & n) = .Cells(i, 2).Value
.Range("H" & n) = .Cells(i, 3).Value
.Range("I" & n) = .Cells(i, 4).Value
n = n + 1
End If
Next i
'realizamos el sumatorio en la última celda de los importes negativos
RngNeg = Application.CountA(.Range("F:F"))
.Cells(RngNeg + 1, 9) = Application.WorksheetFunction.Sum(.Range("I2:I" & RngNeg))
With .Cells(RngNeg + 1, 9)
.Font.Bold = True
.Style = "Currency"
End With
'iniciamos el bucle para pasar los datos con signo positivo a las columnas especificadas
n = 2
For i = 2 To fin
contador = 0
If .Cells(i, 4) > 0 And Month(.Cells(i, 2)) = nMes Then contador = contador + 1
If contador = 1 Then
.Range("K" & n) = .Cells(i, 1).Value
.Range("L" & n) = .Cells(i, 2).Value
.Range("M" & n) = .Cells(i, 3).Value
.Range("N" & n) = .Cells(i, 4).Value
n = n + 1
End If
Next i
'realizamos el sumatorio en la última celda de los importes negativos
RngNeg = Application.CountA(.Range("K:K"))
.Cells(RngNeg + 1, 14) = Application.WorksheetFunction.Sum(.Range("N2:N" & RngNeg))
With .Cells(RngNeg + 1, 14)
.Font.Bold = True
.Style = "Currency"
End With
End With
Application.ScreenUpdating = True
End Sub
Cuando ejecutamos la macro, el resultado que obtener es el siguiente:
Como podéis observar, hemos extraído los movimientos positivos y negativos del mes de febrero y realizado el sumatorio en cada columna para obtener el saldo final.
En este caso específico, la lectora solicitaba filtrar bajo el criterio del mes, pero podríamos realizar el filtro en base a la cuenta, el cliente, etc. Es en la macro donde podréis especificar nuevos condicionales que se adapten a vuestras necesidades.
Es un proceso simple y con muchas posibilidades, os animo a ir examinando el código poco a poco y, si es necesario, lo vayáis adaptando a vuestros trabajos.
Descarga el archivo pulsando en: EXTRAER SALDOS NEGATIVOS Y POSITIVOS EN LOS MOVIMIENTOS DE UNA CUENTA
Excelente aporte amigo como extraigo valores de una hoja a otra y realizar reportes
Hola Washington:
Tienes que realizar modificaciones en la macro para indicar la hoja a la que quieres llevar la información. Te dejo un enlace con el ejemplo del post pero le he añadido una hoja más «Hoja1» y será a donde exportemos los datos. Revisa el código y verás las modificaciones.
https://excelsignum.files.wordpress.com/2017/03/extraer-saldos-negativos-y-positivos-en-los-movimientos-de-una-cuenta_v2.xls
Saludos.
HOLAA, ESTABA BUSCANDO UNA MACRO COMO LA QUE MUY AMABLEMENTE DEJASTE AQUI, DE UN BALANCE GENERAL , REQUIERO EXTRAER LOS SALDOS NEGATIVOS Y POSITIVOS,PERO CREO QUE NO FUNCIONA 🙁
Hola: El código funciona perfectamente. Asegúrate de que tus datos tengan el formato adecuado. Saludos.
Hola, si¡¡ que pena funciona, solo que no había ejecutado la macro, pero ya…tengo un balance de prueba y estoy intentando utilizarlo para sacar las cifras negativas y positivas aparte, pero si me ha costado…
ME PODRIAS AYUDAR , NECESITO SACAR DE UN BALANCE (SALDOS), LOS SALDOS POSITIVOS COLUMNA DEBE Y NEGATIVOS COLUMNA CREDITO, NO ES NECESARIO LA FECHA
Hola:
Debes colocar los datos en la misma disposición que en el post y siguiendo los comentarios e indicaciones.
Saludos.