Access - Sumar columnas con encabezado variable

Necesito sumar las salidas de artículos por bloques de las 10 semanas anteriores.

Si sumo las columnas usando el nombre del encabezado [SEM1]+[SEM2]+[SEM3]+....+[SEM10], al pasar a la semana siguiente, ya no van del 1 al 10, sino del 2 al 11 y la fórmula ya no me vale.

¿Hay alguna manera de poder hacer esta operación?

2 respuestas

Respuesta
1

¿Te refieres a algo como al tener una tabla, más o menos como

Que en caso de que en un formulario eligieras una semana de un año, como en la imagen

Te aparezca algo como

Hola Julian,

primero de todo muchas gracias, te comento a continuación: por motivos de la enorme cantidad de datos, no puedo volcar el 100% de los resultados de uno o varios años para después filtrarlos... es excesivaente lento cuando sólo quiero analizar 14 semanas, que me es más que suficiente para calcular la tendencia, los apros, etc...

Es más bien, que si quiero calcular las ventas promedio de cualquier rango de 14 semanas del año, cómo lo hago si el nombre del encabezado de columna varía semana a semana....

No me han comunicado que habías ampliado la pregunta. Verás, no entiendo eso de que el encabezado de la columna varía. ¿Es qué usas consultas de referencias cruzadas?.

En caso de que tengas muchos registros, en el tipo que te explicaba siempre puedes limitar las fecha. Por ejemplo, vamos a suponer que tienes una tabla Ventas con registros desde el 2009. Siempre puedes ponerle a las funciones un criterio entre fechas, como sería, por ejemplo

... Between fecha1 and fecha-70 que sería entre una fecha determinada y 10 semanas antes, con lo cual no trabajarías con tantos registros.

En el ejemplo que te ponía, el código del evento Después de actualizar del combinado elegir semana, que tiene dos columnas Semana=format([fechapedido];"ee") y otra columna Año:Año([fechapedido]) es

Private Sub ElegirSemana_AfterUpdate()
Dim b As Currency
b = DSum("importe", "pedidos", "cint(format([fechapedido],""ww"")) between " & Me.ElegirSemana & " and " & Me.ElegirSemana & "-10 and year([fechapedido])=" & Me.ElegirSemana.Column(1) & "")
MsgBox "En esas 10 semanas se ha vendido la friolera de " & b & " eurazos de vellon", vbOKOnly + vbInformation, "Que lo sepas"
End Sub

Si pusieras una imagen sería mucho mejor.

Buenas Julian,

gracias por tu respuesta. De entrada te digo que soy novata en esto. Llevo muy poco tienpo con access y ha sido iniciativa mia empezar a automatizar en la medida de lo posible cosas porque mi compañero y yo no damos a basto con todo lo que hay que hacer y cada vez caen más marrones...

Después de llorar un poco te comento que programar en VBA no tengo ni idea, como mucho puedo hacer un copiar pegar guarrete y poco más.

Voy a ver si me puedo explicar porque me siento un poco lerda...

Cada semana vuelco los datos del sistema a un excel con las últimas 14 semanas. Si estamos en la semana 15 del año, vuelco de la semana 1 a la 14. La semana siguiente vuelco de la 2 a la 15 y así sucesivamente.

Con estas 14 semanas calculo en excel la cantidad total vendida, la concurrencia y la venta promedio. Estos tres datos los cruzo con otros dos excel que también tengo que andar cruzando. Así de 3 a 5 días por semana... 

Dicho todo esto, quiero dejar este excel que vuelco del sga en una carpeta junto con los otros 4 excel y con un sólo botón que me genere la tabla que necesito para calcular los "apros".

En el caso concreto del primero de los excel:

Parto de una tabla que tiene las siguientes columnas:

A partir de esta tabla saco varias cosas:

Año: con función "Año"

Semana: con "ParcFecha"

Extraigo los dos primeros dígitos del pedido con "Left" (encabezados de pedido)

Meto un filtro sólo de los encabezados de pedido que me interesa analizar.

Después hago una consulta de ref cruzadas para obtener finalmente cuantas unidades se han expedido por semana de cada una de las referencias:

para abreviar he dejado 6 semanas en vez de las 14.

Ahora necesitaría poder calcular a la derecha las siguientes columnas:

1º Suma de las salidas de cada semana por ref

2º Cuantas veces hay salida en esas semanas

3º Promedio sin contar ceros ni casillas vacías.

Esto lo hago con la consulta 3:

Estas son las fórmulas que tengo para calcular el total, la concurrencia y el promedio:

TOTAL: SiInm([202049]<>0;[202049];0)+SiInm([202050]<>0;[202050];0)+SiInm([202051]<>0;[202051];0)+SiInm([20212]<>0;[20212];0)+SiInm([20213]<>0;[20213];0)+SiInm([20214]<>0;[20214];0)

CONC: SiInm([202049]<>0;1;0)+SiInm([202050]<>0;1;0)+SiInm([202051]<>0;1;0)+SiInm([20212]<>0;1;0)+SiInm([20213]<>0;1;0)+SiInm([20214]<>0;1;0)+SiInm([20213]<>0;[20213];0)+SiInm([20214]<>0;[20214];0)

PROM: Fix([TOTAL]/[CONC])

Cuando saque el excel con las 14 semanas de la semana siguiente a esta, éstas fórmulas ya no me valen porque me dirá que no encuentra la semana [202049] y faltará en el cálculo la [20215]. Aquí es donde estoy atascada.

Vaya turra que te he dado.... creo que ya no me puedo explicar mejor...

Soy enemigo, o al menos no me gustan la consultas de referencias cruzadas. Efectivamente sucede lo que decías, que cambian los encabezados. Pero se puede hacer mucho más sencillo. Te había preparado un ejemplo, pero no había leído lo último, por tanto no sirve para nada. Te propongo, que si quieres, repito si quieres, haz una copia de tu base, pero sólo con la tabla, nada más que con ella y me la mandas a [email protected] y te preparo un ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Emi, ya que si no sé quien me escribe ni los abro.

Respuesta

¿El resultado lo necesita para una consulta, formulario o reporte? Estamos hablando de encabezados dinámicos. Si coloca una imagen es lo mejor.

Hola Eduardo,

es algo que hago con excel pero quiero pasar a access para automatizar este y otros cálculos ligados a este.

Ejemplo: 

Parto de una tabla de ventas diarias, que con una consulta de referencias cruzadas calculo la venta semanal y queda en una tabla parecida a esta de excel.

Columna A, referencia, columna B, descripción, de la C a la P semanas del año con el valor de salidas. Columna Y es la suma de las anteriores, columna Z, cuantas de las anteriores 14 semanas han tenido venta, columa AA es el valor promedio de venta por semana y AB la cantidad máxima vendida.

Yo cada semana que pasa lanzo a 14 semanas la consulta en el sistema, calculo estos valores y cruzo con otras 4 tablas... esto varias veces a la semana.

En el ejemplo, estoy calculando en la semana 47 las 14 anteriores (de 32 a 46), para calcular la suma por ejemplo, tengo que poner en access [32]+[33]+[34]+......+[46]. La semana siguiente tengo que repetir pero el rango de semana varía,  pasamos de la 33 a la 47, con lo que la fórmula [32]+[33]+[34]+......+[46] ya no me vale, tendría que ser [33]+[34]+[35]+......+[47], pero no quiero tener que andar cambiando la fórmula cada semana.

Espero haberme explicado mejor y que me puedas echar una mano.

Salu2.

Como la respuesta que le dan no responde totalmente a su pregunta, he preparado un ejemplo con consulta de referencias cruzadas, automatizando el proceso mediante un formulario, dejando la opción de exportar a Excel.

FORMULARIO PRINCIPAL

Como se observa se elige el año y el rango de semanas a procesar. La información de toma de una tabla de pedidos (En este caso tomé la de Neptuno). El ejemplo lo hago con 10 semanas por falta de espacio para las imágenes. Al hacer clic sobre el botón Procesar estando activado el botón "Exporta a Excel" en Si se genera la consulta y se guarda el archivo de Excel.

ARCHIVO DE EXCEL

No obstante, puede ver la consulta desde Access. Si procesa con el botón "Exporta a Excel" en

No, obtendrá la consulta en pantalla.

CONSULTA EN ACCESS

No explico las tablas y diseño de la consulta porque se haría muy extensa la respuesta. Si desea el ejemplo pude solicitarlo a [email protected] 

Ya le envíe a su correo el archivo. Una observación no sirve calcular la semana de la fecha con Format(fecha,"ww") como le indican porque internamente utiliza el cálculo con DatePart("ww", fecha) y esta falla para determinar la semana, si quiere pruebe en la ventana de inmediato, e ingrese lo siguiente:

?format("31/12/2021","ww")

Le dará como resultado 53

! Que error...!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas