Generar reporte por mes de un libro diario

Hola expertos!
Les agradezco la atención y tiempo a mi pregunta.
Deseo hacer un reporte mensual de registros contables de una base de datos.
Para esto, los registros contables los tengo por fecha y número de cuenta contable.
Entonces deseo tener una macro para que se genere un reporte de una cuenta contable determinada por fecha de registro.
Ejemplo:
Fecha | Cuenta contable | Nombre de la cuenta| importe

1 respuesta

Respuesta
1
Aporta más datos...
Donde están los datos ( referencias A1... B44... etc)
¿Cómo tomaras los criterios (Fecha, cuenta contable?) ( ¿Referencias?... ¿Inputbox?... ¿Formulario?.
¿El reporte se genera mediante que evento?... ( botón... ¿llamada macro?)
el reporte tiene solo una fila ? (Fecha | Cuenta contable | Nombre de la cuenta| importe )
¿Dónde deseas que devuelva el adto? (Referencias)
A B C D E F G H.......
1
2
3
Fecha(A1) | cuenta contble (b1) | nombre de la cuenta (c1) | importe (D1) |
01- jul-11 101001 Bancos 1500
03-jul-11 101005 Clientes 2000
Los datos están en fila y hacia abajo.
Entonces lo que necesito es tener una macro que me de los registros de la 101001 por mes en otra hoja, solo aplicando un botón.
A1 B1 C1 D1 E1
Cuenta contable| Nombre de la cuenta | Ene | Feb | Mar..............
A2 B2 C2 D2 E2
101001 Bancos 1500 2350 1000...........
A3 B3 C3 D3 E3
101005 Clientes 2000 150 890...
Y así sucesivante por cada cuenta y los importes por mes.
Gracias por la atención y tiempo.
Ok.
Salio un poco largo pero acá vamos:
Como no se cual es el indice de tus hojas tome las mías en donde
Sheets(10) es la hoja que contiene los datos a distribuir
Sheets(11) es la hoja en donde los pegaremos.
Tu debes cambiar el indice de las hojas en el script por los indices que tiene tus hojas.
Me explico la hoja nombre "Hoja1", siempre tiene el indice 1 aunque le cambies el nombre muchas veces. ¿Sigue siendo el elemento 1 de la colección se entiende?
Ok, vamos
Pon un botón en la hoja que recibirá los datos alojalo de preferencia desde la columna P hacia la derecha
Vamos a los rótulos
A1 cuenta
B1 nomber
C1 enero
Hasta n1 diciembre
Pues bien: en la hoja base
Se entinden los rótulos en fila 1 también en esta forma
Fecha Cuenta nombre importe
Bien, abre el editor de VBA (ALT+F11) o bien en modo de diseño sobre el botón insertado(que debe ser un control Activex) ve el menu con el botón derecho del mouse y selecciona la opción "ver código").. allí se te abrirá la ventana respectiva al código de ese botón
En esa ventana pega esto:
' resumen contable
'by calvuch 20072011
Dim i As Long
Dim total_registros As Long
Dim total_base As Long
Dim fila As Integer
Dim r As Long
total_registros = Application.WorksheetFunction.CountA(Sheets(11).Range("A:A")) - 1
total_base = Application.WorksheetFunction.CountA(Sheets(10).Range("A:A"))
If total_base <= 0 Then Exit Sub
Application.ScreenUpdating = False
'
' copia numeros de cuenta desde base
Sheets(10).Range("B2" & ":" & "B" & total_base).Copy
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveSheet.Range("$A:$A").RemoveDuplicates Columns:=1, Header:=xlYes
Range("A2").Select
fila = 2
total_registros = Application.WorksheetFunction.CountA(Sheets(11).Range("A:A")) - 1
For r = 1 To total_registros
For i = 2 To total_base
If Sheets(11).Range("A" & fila) = Sheets(10).Range("B" & i) Then
Select Case Int(Mid(Sheets(10).Range("A" & i), 4, 2))
Case Is = 1
Sheets(11).Range("C" & fila) = Sheets(10).Range("D" & i)
Case Is = 2
Sheets(11).Range("D" & fila) = Sheets(10).Range("D" & i)
Case Is = 3
Sheets(11).Range("E" & fila) = Sheets(10).Range("D" & i)
Case Is = 4
Sheets(11).Range("F" & fila) = Sheets(10).Range("D" & i)
Case Is = 5
Sheets(11).Range("G" & fila) = Sheets(10).Range("D" & i)
Case Is = 6
Sheets(11).Range("H" & fila) = Sheets(10).Range("D" & i)
Case Is = 7
Sheets(11).Range("I" & fila) = Sheets(10).Range("D" & i)
Case Is = 8
Sheets(11).Range("J" & fila) = Sheets(10).Range("D" & i)
Case Is = 9
Sheets(11).Range("K" & fila) = Sheets(10).Range("D" & i)
Case Is = 10
Sheets(11).Range("L" & fila) = Sheets(10).Range("D" & i)
Case Is = 11
Sheets(11).Range("M" & fila) = Sheets(10).Range("D" & i)
Case Is = 12
Sheets(11).Range("N" & fila) = Sheets(10).Range("D" & i)
End Select
End If
DoEvents
Next
fila = (fila + 1)
DoEvents
Next
Application.ScreenUpdating = True
MsgBox "Concluido", vbInformation
End Sub
Bien, lo que hace esto es lo siguiente, toma la columna b de la hoja base ( los números de cuenta) y los pega en la columna A de la hoja que tendrá el resumen, pero los pega sin repetios, es decir registros únicos, luego los bucles tomaran una por una las cuentas que se pegaron y recorrerá la base buscando coincidentes y en función al mes que existe en el campo fecha, el control select del bucle pondrá el importe en la celda correspondiente de la hoja de resumen en función a la intentar de su cuenta en al misma hoja, es decir su fila.
y asi una a una.
Nota: si en la hoja base tienes una cuenta con un fecha mes repetida es decir
10-01-2011 101001 $1.000
15-01-2011 101001 $5.300
El bucle tomara como ultimo valor la ultima coincidencia es decir 5.300, no sumara los importes, así que la validación de la integridad de los datos es tu responsabilidad.
En la columna B del resumen en donde debe ir el nombre de la cuenta, pues allí no tienes más que utilizar un sencillo =BuscarV()
Ejemplo:
=buscarv(A2;Hoja1!$B$2:$C$65536;2;FALSO)
Y lo pegas hacia abajo y listo, busca la cuenta de columna A en la matriz B2:C65536 de hoja base en este ejemplo la hoja1
Bien eso es todo. Recuerda cambiar los indices de cada hoja Sheets(xx)
Bye
Si te sirve CIERRA la pregunta, si tienes otras preguntas habré "otra pregunta"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas