No es la primera vez que tengo que recurrir a código cuando necesito realizar alguna tarea a la que las fórmulas no son capaces de llegar. Pero esto no siempre sucede, en algunas ocasiones, fruto de la combinación de funciones podemos llegar a resultados igual de satisfactorios.
Por ejemplo, podemos sumar cada n valor de un rango de celdas, es decir, por ejemplo, sumar el contenido de cada dos celdas.
En este ejemplo he marcado en azul las celdas que necesito sumar, que son las que van de dos en dos (sin tener en cuenta el encabezado). El resultado debe darnos 156.
Para lograr el cálculo debemos utilizar la siguiente fórmula o función:
{=SUMA(SI(RESIDUO(FILA(INDIRECTO("1:"&CONTARA(A1:A26)))-1;2)=0;A1:A26;""))}
En realidad la clave de esta función matricial se apoya en el uso de la función residuo, condicionando su resultado a que los números del rango (matriz) se consideren o no para la suma. Esto lo podéis observar si aplicáis solo parte de la fórmula pero en otra columna, en la «B»:
{=SI(RESIDUO(FILA(INDIRECTO("1:"&CONTARA($A$1:$A$26)))-1;2)=0;$A$1:$A$26;"")}
Este sería el resultado:
Como podéis ver, cuando el resultado de Residuo es cero, es lo mismo que decir que la fila es divisible por ese «n» número definido, en este caso el 2. Al ser cierto, la función «si» condicional, toma ese número en la suma y si no lo es, no lo incluye. En el ejemplo de arriba, simplemente he aplicado parte de fórmula para lo que veáis.
De nuevo os recuerdo que las matrices se introducen: seleccionando la fórmula y luego presionando CTRL + MAYUS + ENTRAR
Aunque no tenía intención, al final no me pude resistir y he reproducido el mismo ejercicio pero con macros. Se puede hacer de muchas formas, pero lo he resuelto con un bucle for next:
Sub SUMAR_N_VALORES()
With Sheets(1)
Dim i As Double
Dim j As Double
fin = Application.CountA(.Range("A:A"))
'Desde la celda 2 hasta fin menos 1 (cabecero) e incrementando de 2 en 2
For i = 2 To fin - 1 Step 2
'Acumulamos en j el resultado de la suma
j = j + i
Next i
'Igualamos valor de celda a resultado
.Cells(2, 3) = j
End With
End Sub
El resultado es exactamente el mismo utilizando tanto la fórmula como la macro:
Ahora solo queda que lo adaptéis a vuestros proyectos y trabajos y obtengáis los beneficios de trabajar con Excel.
Descarga el archivo de ejemplo pulsando en: SUMAR CADA N VALOR DE UN RANGO
Hola. Me gustan tus explicaciones. Tengo una pregunta. Quisiera colorear en una hoja de Excel sólo las filas alternas. Usando o una fórmula o vba pero en Excel 2010 que creo no está la fórmula residuo. Me puedes dar alguna idea? Gracias
Hola,
Puedes hacerlo directamente a través de Inicio > Formato Condicional> Nueva Regla y eliges la opción: Utilice una fórmula que determine las celdas para aplicar formato.
Una vez abierta la pantalla introduces esta fórmula: =RESIDUO(FILA(),3)=0 y eliges el color de relleno. Resaltará con ese color cada 3 celdas.
Puedes hacerlo también con una macro, (suponiendo que tus datos tenga cabecera)
Sub color_n()
Dim i As Double
fin = Application.CountA(Sheets(1).Range(«a:a»))
For i = 2 To fin Step 3
Sheets(1).Cells(i, 1).Interior.Color = vbRed
Next
End Sub
Espero te sirva de ayuda!
Hola, me podrian ayudar???
Estoy tratando de buscar la forma en cómo sumar o restar cantidad con condiciones diferentes
Le explico: al ingresar los datos a mi formulario agrego los datos sig:
Hoja Entradas
codigo del articulo
condición (nuevo, usado, incompleto)
cantidad
Aquí viene mi duda:
Al ingresar el código con la condición nuevo, despuesto vuelvo a ingresar el mismo código pero con la condición usado…. en la hoja entradas, sólo lo que hace es sumar en la misma fila (donde aparece el código) las cantidades que voy ingresando, no hace una separación entre código nuevo y condigo usado…
ayuda por favor!!!
Hola Graciela:
¿Has probado para contar con un contar.si o contar.si.conjunto en el que indiques el criterio de nuevo, usado e incompleto?
Hola, con la fórmula si pero en VBA no tengo idea de como aplicarlo, he intentado con la función If else pero creo que al plantear las condiciones fallo en algo…
Aquí tengo un ejemplo de cómo hacerlo en VBA con contar.si:
https://excelsignum.com/2015/08/11/funcion-contar-si-en-vba/
Hola, quisiera saber si es posible una formula que consista en sumar x euros cada x euros en un rango, es decir por ejemplo sumar 55 euros por cada 1200 euros de la suma de un rango que en total lleva ya por ejemplo 3700 euros. no se si me explico muchas gracias
Hola:
Echa un vistazo a este post: https://excelsignum.com/2019/03/29/sumas-acumuladas-por-rango-segun-criterios/
Podría ser de utilidad.
Buenas tardes, y perdón por la tardanza, la verdad es que la pagina sugerida no se ajusta a lo que necesito, tengo en una casilla hecha la suma de todos los importes que se van anotando para tener el total, entonces lo que quiero es saber si puedo hacer alguna formula para que cada 1200 euros me sume 55 euros en otra casilla que sera el importe que yo he abonado por las cantidades ingresadas.
Actualmente tengo puesto que se divida entre 1200 y multiplique por 55 pero hasta que no se llega al tramo exacto de 1200 no marca adecuadamente el resultado, y no se si eso se puede hacer.
Por otro lado quería saber si hay una formula condicional que me permite meter hasta 5 variables por ejemplo para calcular diferentes tramos de costes en en esa casilla, la función SI me ha servido para hacerlo pero solo me funciona con 2 variables y no puedo agregar mas, hay alguna otra para este propósito?
Muchísimas gracias
Hola Xavi:
Tendría que ver el ejemplo de la primera pregunta para indicarte si se puede formular o es necesario programarlo. SObre la segunda, has probado con un SI anidado, utilizando varias condiciones, o con el operador Y o O, saludos.
Saludos
Tengo una macro que contiene cursos, estudiantes y materias.
De acuerdo al numero de estudiantes, variara la celda d11(donde debo incluir la formula)
Deseo hacer el promedio de nueve celdas comenzando el la celda E11 HASTA L11
Las celdas E11:I11 TIENEN UN VALOR DEL 50% SOBRE EL 80% TOTAL
Las 6, J11 TIENE UN VALOR DEL 30% SOBRE EL 80% TOTAL
La celda 7 : k11 tiene un valor del 20% sobre el 80% total
La celda 8 : L11 tiene uN valor del 20%
En todas las celdas se graban números enteros entre 10-50, el resultado debe quedar en la celda D11, con redondeo dos crifras
hoja1.range («d11») .formula =average(((E11:I11)*40%)+(J11*24%)+(K11*16%)+(L11*20%))/0)
No encuentro el error y/o la sintaxis de a escritura
Quedo atento a vuestra colaboración
Hola Alberto:
El error que te muestra es un #¡DIV/0! es decir un error por estar dividiendo el resultado entre cero. Ese es el problema.
Saludos.
Muy buenas.
Una duda que no consigo resolver en ningún sitio…
Necesito crear un excel en el que tenga una celda que vaya contabilizando paquetes de 50 en 50.
Me explico, en función del valor de una celda B5 por ejemplo, que la celda C5 me cuantifique los packs.
A modo gráfico, si B5 tiene un valor de 100, que C5 me diga 2 (packs), y si B5 tiene un valor de 300, C5 indique 6, y si el valor de B5 es por ejemplo 340, C5 siga siendo 6 (aunque le quede un residual de 40, pero al no llegar a otros 50 no lo cuantifique como 1 pack completo y por lo tanto, no lo indique, sólo packs de 50 completos)
Quizá no se pueda, pero lo necesito para mi trabajo y estoy desesperado por conseguir una fórmula para poder hacerlo.
De todos modos, gracias por anticipado.
En C5 poner =TRUNCAR((B5/50);0)