Totalizar
Hola yo de nuevo, perdón por mi desprolijidad, pero agregue una variable más que es fiados, y cambie algo, casi me muero cuando vi que la planilla ya no funcionaba bien, te mande el archivo al correo para ver si le podes echar un vistazo, alguna línea debo haber cambiado, gracias... MIL...!
1 respuesta
Respuesta de arielbenitez
1
1
arielbenitez, Conocimientos de Excel
Probablemente haces referencia a una celda no indicada, corre tu rutina paso a paso para encontrar en donde haces la referencia incorrecta. No puedo abrir el archivo, así que no puedo mirar.
Te recomiendo que vuelvas a la version anterior, y revises con énfasis en las lineas de captura de datos y cuando escribís en el archivo.
Éxitos.
Te recomiendo que vuelvas a la version anterior, y revises con énfasis en las lineas de captura de datos y cuando escribís en el archivo.
Éxitos.
Lo revise, y es más cargue tal cual me lo mandaste en un comienzo y no me funciona, no reconoce las fechas, ¿por qué no pudiste abrir el archivo? ¿Tienes todavía el primero que te mande?
La lógica esta correcta aunque hubo algunos cambios, fíjate en la condición del while, utiliza más a menudo el paso a paso, te ayudara a entender mejor el funcionamiento de tus rutinas. Seria bueno que muestres la capturas de pantalla del archivo o que levantes el archivo, (no se si esta permitido en esta página) una vez el archivo esta terminado por que utilizas ciclos, condicionales, referencias y a otros podría ayudarle como modelo.
Te envío también a tu mail, ¿es el intimdq de hotmail?. Saludos
Sub totalizar()
'Declarar variables
Dim temp As Long
Dim Mfiados As Long
Dim Mtotalgastos As Long
Dim Mtotalcobros As Long
Dim canti_producto(26) As Long
Dim Mexistencias(26) As Long
Dim Mentrantes(26) As Long
Dim MsalientesP(26) As Long
Dim MsalientesF(26) As Long
Dim McostoCU(26) As Variant
Dim McostoTotales(26) As Long
Dim rango As Long
Dim n As Long
'Modificacion de variables de String a Date
Dim SfechaDesde As Date
Dim SfechaHasta As Date
Dim SfechaConsulta As Date
'Inicializar variables
Mfiados = 0
Mtotalgastos = 0
Mtotalcobros = 0
For i = 1 To 26
Mexistencias(i) = 0
Mentrantes(i) = 0
MsalientesP(i) = 0
MsalientesF(i) = 0
McostoCU(i) = 0
McostoTotales(i) = 0
canti_producto(i) = 0
Next i
rango = 34
n = 0
'Inicio Procedimiento
SfechaDesde = Cells(7, 6)
SfechaHasta = Cells(7, 8)
SfechaConsulta = Cells(46, 6)
'Bucle debe recorrer todas las celdas de fecha, condición que "sfechaConsulta >0"
Do While (SfechaConsulta > 0)
If (SfechaConsulta <= SfechaHasta) And (SfechaConsulta >= SfechaDesde) Then
For i = 1 To 26
'Declarar cada producto de un solo día
Mexistencias(i) = Mexistencias(i) + Cells(54 + n * rango, i + 3)
Mentrantes(i) = Mentrantes(i) + Cells(55 + n * rango, i + 3)
MsalientesP(i) = MsalientesP(i) + Cells(56 + n * rango, i + 3)
MsalientesF(i) = MsalientesF(i) + Cells(57 + n * rango, i + 3)
McostoCU(i) = McostoCU(i) + Cells(60 + n * rango, i + 3).Value
McostoTotales(i) = McostoTotales(i) + Cells(61 + n * rango, i + 3)
'codigo nuevo
temp = Cells(60 + n * rango, i + 3)
If temp > 0 Then
canti_producto(i) = canti_producto(i) + 1
End If
Next i
End If
n = n + 1
'Se calcula fuera del ciclo, se agrega referencia de columna, y rango
Mfiados = Mfiados + Cells(45 + n * rango, 4)
Mtotalgastos = Mtotalgastos + Cells(46 + n * rango, 4)
Mtotalcobros = Mtotalcobros + Cells(47 + n * rango, 4)
'Se pasa al siguiente día
SfechaConsulta = Cells(46 + n * rango, 6)
Loop
'Imprimir valores totales en la primera
Cells(6, 4) = Mfiados
Cells(7, 4) = Mtotalgastos
Cells(8, 4) = Mtotalcobros
For i = 1 To 26
Cells(15, 3 + i) = Mexistencias(i)
Cells(16, 3 + i) = Mentrantes(i)
Cells(17, 3 + i) = MsalientesP(i)
Cells(18, 3 + i) = MsalientesF(i)
On Error Resume Next
Cells(21, 3 + i) = McostoCU(i) / canti_producto(i)
Cells(22, 3 + i) = McostoTotales(i)
Next i
End Sub
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Hola tengo problemas con esta planilla y no lo puedo resolver, por favor necesito ayuda, hace tiempo que estoy con esto. Corregir este programa o algún programa nuevo si es más sencillo... Gracias de antemano...!
Adjunto archivo excel 2007
Te cuento el problema...
La idea del programa es sumar las planillas "1" correspondientes a un intervalo determinado por fechas "desde" "hasta" en la primer planilla "0". Estas planillas "1" son completadas día a día, a forma de contaduría diaria.
FIADOS (-)10
1GASTOS $3 02/01/2009
COBROS50
TOTAL $47
Zanahoria
Sachetblancax 10 kgdadoindustrial
EXISTENCIA (Stock)10
ENTRANTES10
Salientes p10
Salientes f10
TOTAL STOCK00000
COSTO C/U $10
TOTALES $10
PROMEDIO C/U $1#¡DIV/0!#¡DIV/0!#¡DIV/0!#¡DIV/0!
A tener en cuenta
1) En "costo C/U" debe ser el promedio, teniendo en cuenta que hay planillas sin nada, ya que ese producto no se comercializo ese día (debe reconocer que no hay numero para no tomarlo en la cuenta del promedio)
2) Las casillas "FIADOS(-)", "GASTOS$", "COBROS" son llenadas manualmente (no tienen fórmula)
3) El rango de planilla a planilla es de 34 y son 350 planillas aprox.
Problemas del programa:
a) No pone los "o" en
COSTO C/U $
0
b) No respeta el intervalo de fechas "desde" "hasta"
c) No suma las casillas correspondientes a
Fiados (-)
10
GASTOS $3
COBROS50
TOTAL $47
De la primer planilla de "1"
d) No encuentra la planilla si se le pone la misma fecha "desde ", "hasta", tendría que presentar la planilla del día.
Te envío también a tu mail, ¿es el intimdq de hotmail?. Saludos
Sub totalizar()
'Declarar variables
Dim temp As Long
Dim Mfiados As Long
Dim Mtotalgastos As Long
Dim Mtotalcobros As Long
Dim canti_producto(26) As Long
Dim Mexistencias(26) As Long
Dim Mentrantes(26) As Long
Dim MsalientesP(26) As Long
Dim MsalientesF(26) As Long
Dim McostoCU(26) As Variant
Dim McostoTotales(26) As Long
Dim rango As Long
Dim n As Long
'Modificacion de variables de String a Date
Dim SfechaDesde As Date
Dim SfechaHasta As Date
Dim SfechaConsulta As Date
'Inicializar variables
Mfiados = 0
Mtotalgastos = 0
Mtotalcobros = 0
For i = 1 To 26
Mexistencias(i) = 0
Mentrantes(i) = 0
MsalientesP(i) = 0
MsalientesF(i) = 0
McostoCU(i) = 0
McostoTotales(i) = 0
canti_producto(i) = 0
Next i
rango = 34
n = 0
'Inicio Procedimiento
SfechaDesde = Cells(7, 6)
SfechaHasta = Cells(7, 8)
SfechaConsulta = Cells(46, 6)
'Bucle debe recorrer todas las celdas de fecha, condición que "sfechaConsulta >0"
Do While (SfechaConsulta > 0)
If (SfechaConsulta <= SfechaHasta) And (SfechaConsulta >= SfechaDesde) Then
For i = 1 To 26
'Declarar cada producto de un solo día
Mexistencias(i) = Mexistencias(i) + Cells(54 + n * rango, i + 3)
Mentrantes(i) = Mentrantes(i) + Cells(55 + n * rango, i + 3)
MsalientesP(i) = MsalientesP(i) + Cells(56 + n * rango, i + 3)
MsalientesF(i) = MsalientesF(i) + Cells(57 + n * rango, i + 3)
McostoCU(i) = McostoCU(i) + Cells(60 + n * rango, i + 3).Value
McostoTotales(i) = McostoTotales(i) + Cells(61 + n * rango, i + 3)
'codigo nuevo
temp = Cells(60 + n * rango, i + 3)
If temp > 0 Then
canti_producto(i) = canti_producto(i) + 1
End If
Next i
End If
n = n + 1
'Se calcula fuera del ciclo, se agrega referencia de columna, y rango
Mfiados = Mfiados + Cells(45 + n * rango, 4)
Mtotalgastos = Mtotalgastos + Cells(46 + n * rango, 4)
Mtotalcobros = Mtotalcobros + Cells(47 + n * rango, 4)
'Se pasa al siguiente día
SfechaConsulta = Cells(46 + n * rango, 6)
Loop
'Imprimir valores totales en la primera
Cells(6, 4) = Mfiados
Cells(7, 4) = Mtotalgastos
Cells(8, 4) = Mtotalcobros
For i = 1 To 26
Cells(15, 3 + i) = Mexistencias(i)
Cells(16, 3 + i) = Mentrantes(i)
Cells(17, 3 + i) = MsalientesP(i)
Cells(18, 3 + i) = MsalientesF(i)
On Error Resume Next
Cells(21, 3 + i) = McostoCU(i) / canti_producto(i)
Cells(22, 3 + i) = McostoTotales(i)
Next i
End Sub
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Hola tengo problemas con esta planilla y no lo puedo resolver, por favor necesito ayuda, hace tiempo que estoy con esto. Corregir este programa o algún programa nuevo si es más sencillo... Gracias de antemano...!
Adjunto archivo excel 2007
Te cuento el problema...
La idea del programa es sumar las planillas "1" correspondientes a un intervalo determinado por fechas "desde" "hasta" en la primer planilla "0". Estas planillas "1" son completadas día a día, a forma de contaduría diaria.
FIADOS (-)10
1GASTOS $3 02/01/2009
COBROS50
TOTAL $47
Zanahoria
Sachetblancax 10 kgdadoindustrial
EXISTENCIA (Stock)10
ENTRANTES10
Salientes p10
Salientes f10
TOTAL STOCK00000
COSTO C/U $10
TOTALES $10
PROMEDIO C/U $1#¡DIV/0!#¡DIV/0!#¡DIV/0!#¡DIV/0!
A tener en cuenta
1) En "costo C/U" debe ser el promedio, teniendo en cuenta que hay planillas sin nada, ya que ese producto no se comercializo ese día (debe reconocer que no hay numero para no tomarlo en la cuenta del promedio)
2) Las casillas "FIADOS(-)", "GASTOS$", "COBROS" son llenadas manualmente (no tienen fórmula)
3) El rango de planilla a planilla es de 34 y son 350 planillas aprox.
Problemas del programa:
a) No pone los "o" en
COSTO C/U $
0
b) No respeta el intervalo de fechas "desde" "hasta"
c) No suma las casillas correspondientes a
Fiados (-)
10
GASTOS $3
COBROS50
TOTAL $47
De la primer planilla de "1"
d) No encuentra la planilla si se le pone la misma fecha "desde ", "hasta", tendría que presentar la planilla del día.
Te respondo el mail.
Me falto aclarar:
* Cada fecha de analisis debe ser una fecha válida, no puedes escribir en la celda de analiss esa "mascara" que muestras. No pongas 00/00/0000, debe ser una fecha válida o debe estar en blanco.
* El contador de n siendo n el nro de fechas analizadas tiene que ser la penultima linea.
Espero que con eso ya calcule, pero el tema de fiados tienes que revisarlo, no estoy seguro pero creo que hay algo que se me esta pasando.
Me falto aclarar:
* Cada fecha de analisis debe ser una fecha válida, no puedes escribir en la celda de analiss esa "mascara" que muestras. No pongas 00/00/0000, debe ser una fecha válida o debe estar en blanco.
* El contador de n siendo n el nro de fechas analizadas tiene que ser la penultima linea.
Espero que con eso ya calcule, pero el tema de fiados tienes que revisarlo, no estoy seguro pero creo que hay algo que se me esta pasando.
Ya cambie lo de las fechas, pero con el programa que me pasas más arriba no suma la primer planilla de "1" además no respeta las fechas, hace la prueba, desde 01/01/09 al 03/01/09 y suma las del 04/01/09 también solo en los casilleros de "fiatos" y totales de arriba a la izq.los demás respeta las fechas, ¿cómo es eso? Creo no terminar más con esto, nunca tuve tantos problemas, o tal vez un desafío tan grande, consulte por infinidad de lados, pero nadie pudo resolver el tema, siempre hay algún problema, cuando no respeta las fechas, no promedia bien o da error, siempre algo, sinceramente no soy programador, lo que aprendí me costó horas y horas de esfuerzo, para no poder hacer algo como esto, que frustración, vos que sabes, ¿es tan difícil algo de esta envergadura? ¿Realmente es complicado o soy yo que me falta mucho?... GRACIAS::.
Las celdas de calculo de totales no estaban dentro del if, también te paso el contador donde tiene que estar.
Ya estas terminando no te rindas, es un muy buen trabajo. Trata de ser más paciente y de utililzar más a menudo el paso a paso (F8) del VBA.
Te paso el código, no hubo modificación de la escritura pero si en la ubicación de las lineas de código.
Sub totalizar()
'Declarar variables
Dim temp As Long
Dim Mfiados As Long
Dim Mtotalgastos As Long
Dim Mtotalcobros As Long
Dim canti_producto(26) As Long
Dim Mexistencias(26) As Long
Dim Mentrantes(26) As Long
Dim MsalientesP(26) As Long
Dim MsalientesF(26) As Long
Dim McostoCU(26) As Variant
Dim McostoTotales(26) As Long
Dim rango As Long
Dim n As Long
'Modificacion de variables de String a Date
Dim SfechaDesde As Date
Dim SfechaHasta As Date
Dim SfechaConsulta As Date
'Inicializar variables
Mfiados = 0
Mtotalgastos = 0
Mtotalcobros = 0
For i = 1 To 26
Mexistencias(i) = 0
Mentrantes(i) = 0
MsalientesP(i) = 0
MsalientesF(i) = 0
McostoCU(i) = 0
McostoTotales(i) = 0
canti_producto(i) = 0
Next i
rango = 34
n = 0
'Inicio Procedimiento
SfechaDesde = Cells(7, 6)
SfechaHasta = Cells(7, 8)
SfechaConsulta = Cells(46, 6)
'Bucle debe recorrer todas las celdas de fecha, condición que "sfechaConsulta >0"
Do While (SfechaConsulta > 0)
If (SfechaConsulta <= SfechaHasta) And (SfechaConsulta >= SfechaDesde) Then
For i = 1 To 26
'Declarar cada producto de un solo día
Mexistencias(i) = Mexistencias(i) + Cells(54 + n * rango, i + 3)
Mentrantes(i) = Mentrantes(i) + Cells(55 + n * rango, i + 3)
MsalientesP(i) = MsalientesP(i) + Cells(56 + n * rango, i + 3)
MsalientesF(i) = MsalientesF(i) + Cells(57 + n * rango, i + 3)
McostoCU(i) = McostoCU(i) + Cells(60 + n * rango, i + 3).Value
McostoTotales(i) = McostoTotales(i) + Cells(61 + n * rango, i + 3)
'codigo nuevo
temp = Cells(60 + n * rango, i + 3)
If temp > 0 Then
canti_producto(i) = canti_producto(i) + 1
End If
Next i
'Se calcula fuera del ciclo, se agrega referencia de columna, y rango
Mfiados = Mfiados + Cells(45 + (n * rango), 4)
Mtotalgastos = Mtotalgastos + Cells(46 + n * rango, 4)
Mtotalcobros = Mtotalcobros + Cells(47 + n * rango, 4)
End If
n = n + 1
'Se pasa al siguiente día
SfechaConsulta = Cells(46 + n * rango, 6)
Loop
'Imprimir valores totales en la primera
Cells(6, 4) = Mfiados
Cells(7, 4) = Mtotalgastos
Cells(8, 4) = Mtotalcobros
For i = 1 To 26
Cells(15, 3 + i) = Mexistencias(i)
Cells(16, 3 + i) = Mentrantes(i)
Cells(17, 3 + i) = MsalientesP(i)
Cells(18, 3 + i) = MsalientesF(i)
On Error Resume Next
Cells(21, 3 + i) = McostoCU(i) / canti_producto(i)
Cells(22, 3 + i) = McostoTotales(i)
Next i
End Sub
Ya estas terminando no te rindas, es un muy buen trabajo. Trata de ser más paciente y de utililzar más a menudo el paso a paso (F8) del VBA.
Te paso el código, no hubo modificación de la escritura pero si en la ubicación de las lineas de código.
Sub totalizar()
'Declarar variables
Dim temp As Long
Dim Mfiados As Long
Dim Mtotalgastos As Long
Dim Mtotalcobros As Long
Dim canti_producto(26) As Long
Dim Mexistencias(26) As Long
Dim Mentrantes(26) As Long
Dim MsalientesP(26) As Long
Dim MsalientesF(26) As Long
Dim McostoCU(26) As Variant
Dim McostoTotales(26) As Long
Dim rango As Long
Dim n As Long
'Modificacion de variables de String a Date
Dim SfechaDesde As Date
Dim SfechaHasta As Date
Dim SfechaConsulta As Date
'Inicializar variables
Mfiados = 0
Mtotalgastos = 0
Mtotalcobros = 0
For i = 1 To 26
Mexistencias(i) = 0
Mentrantes(i) = 0
MsalientesP(i) = 0
MsalientesF(i) = 0
McostoCU(i) = 0
McostoTotales(i) = 0
canti_producto(i) = 0
Next i
rango = 34
n = 0
'Inicio Procedimiento
SfechaDesde = Cells(7, 6)
SfechaHasta = Cells(7, 8)
SfechaConsulta = Cells(46, 6)
'Bucle debe recorrer todas las celdas de fecha, condición que "sfechaConsulta >0"
Do While (SfechaConsulta > 0)
If (SfechaConsulta <= SfechaHasta) And (SfechaConsulta >= SfechaDesde) Then
For i = 1 To 26
'Declarar cada producto de un solo día
Mexistencias(i) = Mexistencias(i) + Cells(54 + n * rango, i + 3)
Mentrantes(i) = Mentrantes(i) + Cells(55 + n * rango, i + 3)
MsalientesP(i) = MsalientesP(i) + Cells(56 + n * rango, i + 3)
MsalientesF(i) = MsalientesF(i) + Cells(57 + n * rango, i + 3)
McostoCU(i) = McostoCU(i) + Cells(60 + n * rango, i + 3).Value
McostoTotales(i) = McostoTotales(i) + Cells(61 + n * rango, i + 3)
'codigo nuevo
temp = Cells(60 + n * rango, i + 3)
If temp > 0 Then
canti_producto(i) = canti_producto(i) + 1
End If
Next i
'Se calcula fuera del ciclo, se agrega referencia de columna, y rango
Mfiados = Mfiados + Cells(45 + (n * rango), 4)
Mtotalgastos = Mtotalgastos + Cells(46 + n * rango, 4)
Mtotalcobros = Mtotalcobros + Cells(47 + n * rango, 4)
End If
n = n + 1
'Se pasa al siguiente día
SfechaConsulta = Cells(46 + n * rango, 6)
Loop
'Imprimir valores totales en la primera
Cells(6, 4) = Mfiados
Cells(7, 4) = Mtotalgastos
Cells(8, 4) = Mtotalcobros
For i = 1 To 26
Cells(15, 3 + i) = Mexistencias(i)
Cells(16, 3 + i) = Mentrantes(i)
Cells(17, 3 + i) = MsalientesP(i)
Cells(18, 3 + i) = MsalientesF(i)
On Error Resume Next
Cells(21, 3 + i) = McostoCU(i) / canti_producto(i)
Cells(22, 3 + i) = McostoTotales(i)
Next i
End Sub
- Compartir respuesta
- Anónimo
ahora mismo