Totalizar

Hola como estas quería saber si me podes dar una mano con esto:
Sub totalizar()
'Declarar variables
Dim Mtotalgastos(26) As Long
Dim Mtotalcobros(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 Long
Dim McostoTotales(26) As Long
Dim rango As Long
Dim n As Long
Dim SfechaDesde As String
Dim SfechaHasta As String
Dim SfechaConsulta As String
'Inicializar variables
For i = 1 To 26
Mtotalgastos(i) = 0
Mtotalcobros(i) = 0
Mexistencias(i) = 0
Mentrantes(i) = 0
MsalientesP(i) = 0
MsalientesF(i) = 0
McostoCU(i) = 0
McostoTotales(i) = 0
Next i
SfechaDesde = Cells(7, 6)
SfechaHasta = Cells(7, 8)
SfechaConsulta = Cells(46, 6)
rango = 34
n = 0
'Inicio Procedimiento
While (SfechaConsulta <> "")
If ((SfechaConsulta <= SfechaHasta) And (SfechaConsulta >= SfechaDesde)) Then
For i = 1 To 26
Mtotalgastos(i) = Mtotalgastos(i) + Cells(46 + n)
Mtotalcobros(i) = Mtotalcobros(i) + Cells(47 + n)
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)
McostoTotales(i) = McostoTotales(i) + Cells(61 + n * rango, i + 3)
Next i
End If
n = n + 1
SfechaConsulta = Cells(46 + n * rango, 6)
Wend
'Imprimir Valores
For i = 1 To 26
Cells(7, 3) = Mtotalgastos(i)
Cells(8, 3) = Mtotalcobros(i)
Cells(15, 3 + i) = Mexistencias(i)
Cells(16, 3 + i) = Mentrantes(i)
Cells(17, 3 + i) = MsalientesP(i)
Cells(18, 3 + i) = MsalientesF(i)
Cells(21, 3 + i) = McostoCU(i)
Cells(22, 3 + i) = McostoTotales(i)
Next i
End Sub
Yo le agregue al programa "totalgastos" y "totalcobros" para que me los sume también, pero no lo puedo lograr, ademas en costoCU debe ser el promedio no la suma de los valores, si quieres te puedo mandar al correo el archivo de Excel así lo ves mejor, desde ya muchas gracias...

5 respuestas

Respuesta
1
En el ciclo que realizas tu acumulado en las variables Mtotalgastos, Mtotalcobros solo defines la dirección de la columna, no de la fila.
Mtotalgastos(i) = Mtotalgastos(i) + Cells(46 + n)
Mtotalcobros(i) = Mtotalcobros(i) + Cells(47 + n)
Es decir en Mtotalgatos sumas valores de AT1 +AV1+AW1+... y en MtotalCobros sumas lo mismo pero sin la celda AT1; Mtotalcobros = AV1+AW1+...
Podes revisar estas lineas del código, comenta y enviame el archivo para conocer la estructura de la base sobre la que realizas los cálculos, mi mail es carlos.bnitez(arroba)gmail.com.
Bueno ya te envíe el archivo, gracias mil...!
Las modificaciones están comentadas, saludos
Sub totalizar()
'Declarar variables
Dim Mtotalgastos As Long
Dim Mtotalcobros 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 Long
Dim McostoTotales(26) As Long
Dim rango As Long
Dim n As Long
Dim SfechaDesde As String
Dim SfechaHasta As String
Dim SfechaConsulta As String
'Inicializar variables
'Solo variables no hace falta una matriz
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
Next i
SfechaDesde = Cells(7, 6)
SfechaHasta = Cells(7, 8)
SfechaConsulta = Cells(46, 6)
rango = 34
n = 0
'Inicio Procedimiento
While ((SfechaConsulta <= SfechaHasta) And (SfechaConsulta >= SfechaDesde) And SfechaConsulta <> "")
For i = 1 To 26
'Mtotalgastos(i) = Mtotalgastos(i) + Cells(46 + n) 
'Mtotalcobros(i) = Mtotalcobros(i) + Cells(47 + n)
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)
McostoTotales(i) = McostoTotales(i) + Cells(61 + n * rango, i + 3)
Next i
n = n + 1
SfechaConsulta = Cells(46 + n * rango, 6)
'Se calcula fuera del ciclo, se agrega referencia de columna, y rango
Mtotalgastos = Mtotalgastos + Cells(46 + n * rango, 4)
Mtotalcobros = Mtotalcobros + Cells(47 + n * rango, 4)
Wend
'Imprimir Valores
'Se imprime fuera del for.
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)
Cells(21, 3 + i) = McostoCU(i) / n
Cells(22, 3 + i) = McostoTotales(i)
Next i
End Sub
Tu respuesta esta increíble, solo tiene un pequeño detalle que en costoCU me divide por la cantidad de planillas, ¿pero si estas tienen "0" ya que ese día no se comercializo el producto? No reconoce si hay "0" ya que no lo tendría que incluir en la división, ¿no?, y una consulta, como hago para que el marco se ejecute solo al terminar de poner la fecha y enter, ¿y ya se ejecute? Gracias por tu preocupación en el tema, estoy realmente agradecido...
Para contar la cantidad de productos deberás usar algo así:
temp = cells(60 + n * rango, i + 3)
if temp > 0 then
canti_producto(i)=canti_producto(i)+1
Endif
Para ejecutar la macro te recomiendo que crees un control y asignes al control la ejecución de la macro, no te olvides de validar las celdas de parámetros para que solo introduzcan fechas.
En qué punto del programa debería intercalarlo, ya que me dice que no se ha determinado una función, perdón por mi ignorancia...
Primero dimensionar variables
dim temp as long
dim canti_producto(26) as long
En tu ciclo de acumulado debes incluir el calculo de cantidad de elementos
For i = 1 To 26
'Mtotalgastos(i) = Mtotalgastos(i) + Cells(46 + n)
'Mtotalcobros(i) = Mtotalcobros(i) + Cells(47 + n)
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)
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
endif
Next i
Éxitos.
PD:para crear el control, ver, barra de herramientas, formularios, elegí el control tipo botón
clic derecho s/ el control asignar macro, elegís la macro totalizar
Gracias...! Muy buena dedicación y se ve enseguida cuando alguien sabe del tema y no esta con vueltas, Nuevamente gracias todo funciona de 10...!
Respuesta
1
Por lo que pude ver por arriba me parece que en el primer for que haces no asignas valores, los dices que que i=1 las variables valgan cero, de todos modos cuando vea el archivo lo veré más claro.
Un consejito cuando trabajes con celdas ( Cell 7, 6) y estas van a ser fijas lo mejor es que le asigne un nombre por ejemplo "fecha_dsd", te vas al menu >>Insertar_Nombre y le asignas un nombre representativo que te apareceré en un lugar de F7, por que te digo esto ... por que a la hora de modificar tu hoja las celda F7 puede variar en relación con tu script, pero si le asignas un nombre en el siempre se llama igual "fecha_dsd"
Bueno espero tu archivo
Gracias por el consejo, a donde te puedo mandar el archivo... ¿correo? ¿Cuál?
Te dejo el correo creí haberte respondido pero parece que no
mi correo es [email protected] así ya me puedes enviar el archivo
TE cuento que le hice un run a tu rutina y efectivamente coloco todos los valores a cero
¿También contame un poquito más del objetivo del programar bueno suma pero algo más ok?
Chau..
Hola como estas, gracias por tu preocupación ya te envíe todo al correo con la explicación ...
No creas que me he olvidado de vos es que estuve laburando estos 2 días y ahora tengo un poco de tiempo para meterme con tu archivo.
Mira lo que se me había ocurrido es que el rango de fechas ( fechaDesde y fechaHasta ) cargaran unos combobox que por ejemplo recorrerían solamente criterios de fechas cargadas por vos es decir no recorrerían las 365 planillas "1" sino que el rango de fechas iría creciendo dinámicamente( en una apli de excel no habría problema por que el tiempo consumido es nada pero es para programar como Dios manda ), eso si las planillas tendrían que ser correlativas ya que si no el proceso de carga del combobox se saldría del loop.
Otra ventaja es que evitaríamos errores al tipiar una fecha.
Entonces a partir de esos rangos elaborar el proceso de los for para que trabajemos con las planillas. Te mando un adelanto:
'Esta subrutina va a cargar un combobox dinámico con respecto a las fechas introducidas para seleccionar desde alli la fechaDesde
Sub Cargar_Cbox_fechaDesde()
'Declaro variables iniciales
Dim rango As Integer
Dim i As Integer
Dim fechaDesde As String
'Asigno valores iniciales
fechaDesde = Cells(46, 6)
rango = 34
i = 0
'Limpiar Cbox_fechaDesde para poder listar los valores desde fechas para nuevos intervalos
Cbox_fechaDesde.Clear
'Cargar Cbox_fechaDesde con los valores correspondientes a las fechas de cada una de la planillas "1"
'Procesara las fechas mientras sean distintos a estos casos
Do While fechaDesde <> "00/00/09" And fechaDesde <> "" And fechaDesde <> "00/00/00"
'Carga Items al Combobox ya con el formato de fecha
Cbox_fechaDesde.AddItem Format(Cells(46 + (i * rango), 6), "dd-mm-yy")
'Actualizo la fecha de consulta
fechaDesde = Cells(46 + (i * rango), 6)
i = i + 1
Loop
'Esta linea es para eliminar el ultimo registro que me trae el do-while que no proceso
Cbox_fechaDesde.RemoveItem Cbox_fechaDesde.ListCount - 1
[Cbox_fechaDesde] = Format([Cbox_fechaDesde], "dd-mm-yy")
End Sub
Bueno lo mismo para cargar el listado de fechaHasta con otro combobox
Ahora solo hay que traer la selección de los dos combobox para trabajar con los for
ah... me olvidaba para poder realizar el promedio en celdas cero te hice esta formulita en planilla =IF(D22<>0;IF(D17<>0;D22/D17;0);0) si keres lo dejamos así o sino le encontramos otra solución...
¿Decime qué opinas?
Me parece bien lo del promedio es más sencillo, por el tema de las fechas estoy probando no ponerle nada en el casiller, 00/00/09 directamente dejarlo vacío, ¿esa rutina funcionaria igual?
Bueno espero no haber tardado tanto, es que el laburo es sagrado deberíamos ganar mucho más dinero para poder trabajar solo cuando nos haga falta y el tiempo poder utilizarlo en otras actividades que nos satisfagan pero en todo caso este tema es para desarrollarlo en otra categoría.
Te digo desde ya que esto que te envío es una de las formas de hacerlo, hay otras formas y seguro que mejores te lo dejo de aclaración
Todo buen programador sabe, que la aplicación, la tiene que poder utilizar desde alguien que no sepa nada hasta un programador y debe ser intuitiva es decir que ella misma te guie por los pasos que debes realizar.
Vamos a la aplicación:
ACTUALIZAR: La aplicación consta de un nuevo botón que actualiza las fechas de tus planillas una vez que vos has cargado un nuevo día.(En realidad lo que hace es cargar los dos combobox de fechaDesde y fechaHasta según las planillas que tengas cargadas)
SIN ACTUALIZAR: Pero también puedes hacer las consultas de días que anteriormente hayas cargado.
Como veras en la condición de carga desecha los valores "00/00/09", "" (cuando hay nada) y los valores "00/00/00" así que no te molestes en borrar todas las fechas de las planillas .
Eso si como ya te dije en la anterior respuesta los valores de fechas de planillas deben ser consecutivas(no te saltes el llenado de fechas) ya que si te saltas alguna planilla "1" el bucle se saldría de la condición y no haría las referencias del rango de fechas y el numero de ciclo.
Luego en cada combobox debes seleccionar las fechaDesde y las fechaHasta esto te servirá doblemente para poder obtener el rango de fechas [desde - hasta] y poder determinar el número de veces que el ciclo de la subrutina totalizar() se debe ejecutar.
Una vez que hemos realizado este paso previo de cargar y seleccionar fechas en los combobox estamos en condiciones de ejecutar totalizar() que se ejecuta con el botón que habías indicado solo que ahora se llamar "TOTALIZAR" por lo de la intuición (no te enojes) por lo demás he respetado tu código para que puedas entender claramente lo que realiza.
Un punto negativo es que al darle al botón de ACT. FECHAS los 2 combobox se cargan pero verás que estando contraídos no indican ningún valor... esto es por que la propiedad TopIndex que es la que te permite ver el primer elemento en VB 6.0 es un propiedad protegida es decir no puedo trabajar con el ella y está puesta por defecto a -1
Pero lo combobox se cargan perfectamente.
¿Si podes solucionar esto serias un master y me lo comentas que de esto se trata aprender los unos de los otros OK?
P.D.: Cualquier duda me lo consultas y si encuentras algún error también... Ahora te envío el archivo por correo pruébalo con varios valores yo lo hice pero con algunos vos sabrás más de eso.
Hola como estas, creo que es un trabajo estupendo, mucho más práctico para introducir el intervalo de fecha, lo modifique para que en COSTO C/U tiene que darme el promedio del costo de la mercadería vendida, ya que tiene un precio promedio por bulto distinto cada día (no sé si me explico según el cliente, tiene un precio distinto, y según la cantidad de bultos). Ahora bien en la primer ficha que me da el resumen, no elimina el cálculo anterior, donde en el nuevo cálculo hay "0" (no hay nada), ¿me explico? Si pongo un intervalo de fechas, me da el resumen, pero cuando pongo otro intervalo, me sobre escribe el anterior, sin modificar las casillas que no tienen valor en el ultimo calculo, por lo que me queda el numero del cálculo anterior, y debería poner "0" o nada en su defecto, ¿por qué puede ser esto?
Sub totalizar()
'Declarar variables
Dim canti_producto(26) As Long
Dim temp As Long
Dim Mfiados As Long
Dim Mtotalgastos As Long
Dim Mtotalcobros 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 Long
Dim McostoTotales(26) As Long
'Variables de referencias: números de ciclo, rangos, valor fechaDesde y valor fechaHasta
Dim m As Integer
Dim n As Integer
Dim rango As Integer
Dim fDesde As Date
Dim fHasta As Date
'Inicializar variables
m = 0
n = (Cbox_fechaHasta.ListIndex + 1) - (Cbox_fechaDesde.ListIndex + 1)
rango = 34
fDesde = Cbox_fechaDesde.Value
fHasta = Cbox_fechaHasta.Value
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
Next i
'Inicio Procedimiento
While ((fDesde <= fHasta) And (m <= n))
For i = 1 To 26
'Mtotalgastos(i) = Mtotalgastos(i) + Cells(47 + n)
'Mtotalcobros(i) = Mtotalcobros(i) + Cells(48 + n)
Mexistencias(i) = Mexistencias(i) + Cells(54 + m * rango, i + 3)
Mentrantes(i) = Mentrantes(i) + Cells(55 + m * rango, i + 3)
MsalientesP(i) = MsalientesP(i) + Cells(56 + m * rango, i + 3)
MsalientesF(i) = MsalientesF(i) + Cells(57 + m * rango, i + 3)
McostoCU(i) = McostoCU(i) + Cells(60 + m * rango, i + 3).Value
McostoTotales(i) = McostoTotales(i) + Cells(61 + m * rango, i + 3)
'codigo nuevo
temp = Cells(60 + m * rango, i + 3)
If temp > 0 Then
canti_producto(i) = canti_producto(i) + 1
End If
Next i
'Se calcula fuera del ciclo del For, se agrega referencia de columna, y rango
Mfiados = Mfiados + Cells(45 + m * rango, 4)
Mtotalgastos = Mtotalgastos + Cells(46 + m * rango, 4)
Mtotalcobros = Mtotalcobros + Cells(47 + m * rango, 4)
m = m + 1
Wend
'Imprimir Valores
'Se imprime fuera del for.
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
'Esta subrutina va a cargar los comboboxs dinámicos con respecto a las fechas introducidas para
'seleccionar desde alli la fechaDesde y la fechaHasta en respectivos comboboxs
Sub Cargar_Cbox_fechaDesde_Hasta()
'Declaro variables iniciales
Dim rango As Integer
Dim i As Integer
Dim ultimo As Integer
Dim primero As Integer
Dim fechaDesde As String
'Asigno valores iniciales
fechaDesde = Cells(46, 6)
rango = 34
i = 0
'Limpiamos los Cbox_fechaDesde y Cbox_fechaHasta para poder listar los valores de fechas para nuevos intervalos
Cbox_fechaDesde.Clear
Cbox_fechaHasta.Clear
'Cargar Cbox_fechaDesde y Cbox_fechaHasta con los valores correspondientes a las fechas de cada una de la planillas "1"
'Procesara las fechas mientras sean distintos a estos casos
While fechaDesde <> "00/00/09" And fechaDesde <> "" And fechaDesde <> "00/00/00"
'Carga Items al Combobox Cbox_fechaDesde ya con el formato de fecha
Cbox_fechaDesde.AddItem Format(Cells(46 + (i * rango), 6), "dd/mm/yy")
'Carga Items al Combobox Cbox_fechaHasta ya con el formato de fecha
Cbox_fechaHasta.AddItem Format(Cells(46 + (i * rango), 6), "dd/mm/yy")
'Actualizo la fecha de consulta
fechaDesde = Cells(46 + (i * rango), 6)
i = i + 1
Wend
'Esta linea es para eliminar el ultimo registro que me trae el do-while que no proceso
Cbox_fechaDesde.RemoveItem Cbox_fechaDesde.ListCount - 1
Cbox_fechaHasta.RemoveItem Cbox_fechaHasta.ListCount - 1
End Sub
Private Sub Cbox_fechaDesde_Click()
Cells(7, 6) = Cbox_fechaDesde.Value
End Sub
Private Sub Cbox_fechaHasta_Click()
Cells(7, 8) = Cbox_fechaHasta.Value
End Sub
Sin ver el archivo te respondo y creo saber lo que ocurre, cada vez que selecciones un intervalos debes actualizar fechas, pienso que lo que pasa es que trabaja con los anteriores intervalos.
De todos modo me fijare l oque esta pasando
Hola como estas, bueno te cuento, ya revise lo que me decías, pero pasa lo mismo, además no suma las casillas correspondientes a FIADOS, Total GASTOS, Total COBROS, lo voy a seguir revisando...
Bueno si lo estuve viendo y tengo que reconocer que había una error, eso pasa por no revisar por eso te pedí que lo hagas...
Si tenias razón y lo que sucedía que como en m=0, al actualizar las celdas siempre empezaba por la primera planilla hasta el final del ciclo
Bueno lo que hice puse otra variable de comienzo "a" y entonces hago m=a y las celdas empiezan a actualizar a partir de allí.
Lo que me comentas de los fiados y demás antes te sugerí que o en las celdas de las planillas "1" deben haber fórmulas o valores pero al no haber nada no te traerá nada...
Bueno debes hacer la modificación de COSTOC/U lo que si no entiendo por que en la subrutina haces --> Cells(21, 3 + i) = McostoCU(i) / (m - 1)
Por lo demás creo todo va bien pero como siempre miralo y si surge algo me lo decís
Hola como estas, bueno te cuento, quedo todo de 10, esto"/ (m-1)" lo puse porque pretendía hacer una prueba por el tema del promedio pero lo solucione de esta forma:
Dim temp As Long
Dim canti_producto(26) As Long
canti_producto(i) = 0
McostoCU(i) = McostoCU(i) + Cells(60 + (m - 1) * rango, i + 3).Value
temp = Cells(60 + (m - 1) * rango, i + 3)
If temp > 0 Then
canti_producto(i) = canti_producto(i) + 1
End If
On Error Resume Next
Cells(21, 3 + i) = McostoCU(i) / canti_producto(i)
Cells(22, 3 + i) = McostoTotales(i)
Quedo todo de 10, gracias por tu dedicación, y esfuerzo un abrazo...
PD: El código terminado total es este:
Sub totalizar()
'Declarar variables
Dim temp As Long
Dim canti_producto(26) As Long
Dim Mfiados As Long
Dim Mtotalgastos As Long
Dim Mtotalcobros 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 Long
Dim McostoTotales(26) As Long
'Variables de referencias: números de ciclo, rangos, valor fechaDesde y valor fechaHasta
Dim a As Integer
Dim m As Integer
Dim n As Integer
Dim rango As Integer
Dim fDesde As Date
Dim fHasta As Date
'Inicializar variables
'La variable "a" me establece el punto de partida del rango
a = Cbox_fechaDesde.ListIndex + 1
'En esta linea establebezco a "m" como punto de partida en la sentencia que uso en el while
m = a
'Tengo que sumar "a" a "n" para saber donde tengo que parar pero a partir de "a"
n = (Cbox_fechaHasta.ListIndex + 1) - (Cbox_fechaDesde.ListIndex + 1) + a
rango = 34
fDesde = Cbox_fechaDesde.Value
fHasta = Cbox_fechaHasta.Value
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
'Inicio Procedimiento
While ((fDesde <= fHasta) And (m <= n))
For i = 1 To 26
'Para que me trabaje con la posición real debo hacer "m - 1" xk antes habia sumado +1
'a los indices(Cbox_fechaDesde.ListIndex + 1) y (Cbox_fechaHasta.ListIndex + 1)
Mexistencias(i) = Mexistencias(i) + Cells(54 + (m - 1) * rango, i + 3)
Mentrantes(i) = Mentrantes(i) + Cells(55 + (m - 1) * rango, i + 3)
MsalientesP(i) = MsalientesP(i) + Cells(56 + (m - 1) * rango, i + 3)
MsalientesF(i) = MsalientesF(i) + Cells(57 + (m - 1) * rango, i + 3)
McostoCU(i) = McostoCU(i) + Cells(60 + (m - 1) * rango, i + 3).Value
McostoTotales(i) = McostoTotales(i) + Cells(61 + (m - 1) * rango, i + 3)
temp = Cells(60 + (m - 1) * rango, i + 3)
If temp > 0 Then
canti_producto(i) = canti_producto(i) + 1
End If
Next i
'Se calcula fuera del ciclo del For, se agrega referencia de columna, y rango
Mfiados = Mfiados + Cells(45 + (m - 1) * rango, 4)
Mtotalgastos = Mtotalgastos + Cells(46 + (m - 1) * rango, 4)
Mtotalcobros = Mtotalcobros + Cells(47 + (m - 1) * rango, 4)
m = m + 1
Wend
'Imprimir Valores
'Se imprime fuera del for.
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)
'Cells(21, 3 + i) = McostoCU(i) / (m - 1) '/( m - 1) esto no por que lo haces, bueno vos sabras
'Cells(22, 3 + i) = McostoTotales(i)
On Error Resume Next
Cells(21, 3 + i) = McostoCU(i) / canti_producto(i)
Cells(22, 3 + i) = McostoTotales(i)
Next i
End Sub
'Esta subrutina va a cargar los comboboxs dinámicos con respecto a las fechas introducidas para
'seleccionar desde alli la fechaDesde y la fechaHasta en respectivos comboboxs
Sub Cargar_Cbox_fechaDesde_Hasta()
'Declaro variables iniciales
Dim rango As Integer
Dim i As Integer
Dim ultimo As Integer
Dim primero As Integer
Dim fechaDesde As String
'Asigno valores iniciales
fechaDesde = Cells(46, 6)
rango = 34
i = 0
'Limpiamos los Cbox_fechaDesde y Cbox_fechaHasta para poder listar los valores de fechas para nuevos intervalos
Cbox_fechaDesde.Clear
Cbox_fechaHasta.Clear
'Cargar Cbox_fechaDesde y Cbox_fechaHasta con los valores correspondientes a las fechas de cada una de la planillas "1"
'Procesara las fechas mientras sean distintos a estos casos
While fechaDesde <> "00/00/09" And fechaDesde <> "" And fechaDesde <> "00/00/00"
'Carga Items al Combobox Cbox_fechaDesde ya con el formato de fecha
Cbox_fechaDesde.AddItem Format(Cells(46 + (i * rango), 6), "dd/mm/yy")
'Carga Items al Combobox Cbox_fechaHasta ya con el formato de fecha
Cbox_fechaHasta.AddItem Format(Cells(46 + (i * rango), 6), "dd/mm/yy")
'Actualizo la fecha de consulta
fechaDesde = Cells(46 + (i * rango), 6)
i = i + 1
Wend
'Esta linea es para eliminar el ultimo registro que me trae el do-while que no proceso
Cbox_fechaDesde.RemoveItem Cbox_fechaDesde.ListCount - 1
Cbox_fechaHasta.RemoveItem Cbox_fechaHasta.ListCount - 1
End Sub
Private Sub Cbox_fechaDesde_Click()
Cells(7, 6) = Cbox_fechaDesde.Value
End Sub
Private Sub Cbox_fechaHasta_Click()
Cells(7, 8) = Cbox_fechaHasta.Value
End Sub
Respuesta
1
No se muy bien que es lo que quieres, ya que me faltarían datos, pero haciendo correr lamacro que me envías y tras corregir algunas cosillas, me falla en esta fórmula
SfechaConsulta = Cells(46 + n * rango, 6)
Ya que el resultado es mayor que el numero de filas que tiene excel por lo menos en la versión 2003. Igual es por que yo no tengo datos en mi hoja, o porque la fórmula realmente esta mal, o quien sabe (tú sabrás cual es la fórmula). Si te parece, posteame tu e-mail y te envío yo el mio, para intercambio de ficheros. Y así poder hacer la ayuda más personal.
Respuesta
1
Como estas me gustaría que me mandaras el archivo al mail [email protected]
Pero te puedo colaborar con la función de promedio de manera "Manual":
For i = 6 To f
For j = 4 To 8
Almacenamiento(i, j) = Hoja1.Cells(i, j)
If j = 4 Then
Almacenamiento(i, j - 1) = Hoja1.Cells(i, j - 1)
cont = Almacenamiento(i, j) + Almacenamiento(i, j - 1)
ElseIf j = 5 Or j > 5 Then
cont = cont + Almacenamiento(i, j)
End If
Next j
Hoja1.Cells(i, 9) = Int(cont / n)
Ahbi que tener en cuenta que n es el numero de datos.
Ok, dale te mando el archivo
Pues en lo de calcular Fiados + Gastos + Cobros Le recomiendo que en ves de realizarlo mediante ecuación en excel desarrolle el código en VBA
En cuento a la suma de los promedios cuando se digita un cero te recomiendo el código que te envíe en donde "n" es el numero de datos esto lo puedes hacer asignando el numero de registros a una caja de texto (Texto1.text= contar(D54:D57)) esta caja dfe texto la podrás volver invisible dándole en propiedad Visible igual a False de esta manera ya puede usted sacar el p'romedio Sumando las cantidades y dividiéndolas entre el numero de datos así sean cero (Que están dentro de la caja invisible). Espero que esto le pueda ayudar... si vive en Bogotá d.c nos podemos incluso encontrar.
Éxitos!.
Hola como estas, gracias por tu respuesta, modificando el archivo me surgieron otros problemitas, te reenvíe el archivo y una explicación al correo, GRACIAS...
Prueba haber si remplazando el AND por el OR en
If ((SfechaConsulta <= SfechaHasta) And (SfechaConsulta >= SfechaDesde)) Then
Funciona
No, ¿no funciono... pudiste ver el archivo?
Le comento que para el promedio haga lo siguiente, para la primera tabla, ubíquese en la celda D60 y digite la ecuación en el editor ed fórmulas:
=PROMEDIO(D54:D57) , le romiendo que para los valores en donde no se registra nada ponga un 0, para que la funcion promedio funcione bien. UIna estrategia para asignar ceros a las celdas vacias es hacer un for que se encargue de asignar 0 a las celdas que no tienen valor. En costo C/u usted me dice que no sirve los 0 pues yo los pongo y me los deja poner incluso si estos seros son el resultado de un promedio.
No le entiendo que no le sume las celdas Fiados, Gastos y Cobros, pues al dar clic sobre lel total celda (D9) de la planilla veo que used esta sumando el valor de los fiados más todos los totales que van de la celda D22 hasta la celda AC22 y lo que me deja pensando es lo de los rangos de fecha, ahí le recomiendo que depure paso a paso oprimiendo F8 para que usted pueda observar que hace el código en cada paso y poder detectar el error.
Éxitos
Respuesta
Echándole un vistazo rapido en las lineas de asignación de la sumas te falta el segundo parámetro de la función Cells ( en las demás tienes i + 3)
Y referente al costo CU lo que haces es ir sumando como en las variables anteriores
debería ser algo así mcostoCu = (cobros -gastos)/existencias
Si lo que pasa es que la variable i es de 1 a 26 y yo quiero que me sume solo las casilas de esa columna con un intervalo ya detrminado de filas todo solo en la casilla donde pongo el parámetro, si quieres te envío el archivo y así lo entenderías mejor... Gracias
No tengo por costumbre dar mi email a nadie que no conzca
Mtotalgastos(i) = Mtotalgastos(i) + Cells(46 + n* rango, i + 3)
Mtotalcobros(i) = Mtotalcobros(i) + Cells(47 + n* rango, i + 3)
Mexistencias(i) = Mexistencias(i) + Cells(54 + n * rango, i + 3)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas