¿Cómo aplico fórmulas a las filas subtotales?


1

Tengo una hoja de cálculo con muchos subtotales y un número variable de filas entre ellos. Si muestro solo las líneas subtotales, agrego una fórmula y la arrastro hacia abajo, Excel agrega la fórmula a todas las líneas, no solo a las líneas subtotales:

antes del subtotal:

precio del producto
1 3 55
1 4 66
2 5 77
2 6 88
2 7 99
2 8 110
2 9 121
3 10 132
3 11 143
3 12 154

después del subtotal comprimido:

precio del producto
1 Total 7 121
2 Total 35 495
3 Total 33 429
Gran Total 75 1045

promedio agregado a los subtotales:

prod cantidad precio promedio ponderado
1 Total 7121 17.28571429
2 Total 35495 14.14285714
3 Total 33 429 13
Gran Total 75 1045

Fórmula arrastrada hacia abajo y sin comprimir

prod cantidad precio promedio ponderado
1 3 55   
1 4 66   
1 Total 7121 17.28571429
2 5 77 15,4
2 6 88 14.66666667
2 7 99 14.14285714
2 8 110 13,75
2 9 121 13.44444444
2 Total 35495 14.14285714
3 10 132 13,2
3 11 143 13
3 12 154 12.83333333
3 Total 33 429 13
Gran Total 75 1045   

No se concentre en este ejemplo y en cómo se puede hacer de manera diferente. La hoja real es muy compleja y necesitamos usar los subtotales en las fórmulas.

Necesito aplicar fórmulas solo a los subtotales. ¿Cómo puedo hacer eso?


¿Puedes publicar un ejemplo de lo que hay en una de tus filas subtotales y lo que te gustaría ver?
Melanie

muéstrame un ejemplo

En general, esto se hace al revés: aplica fórmulas posteriores solo a las filas de datos y omite los subtotales. La mayoría de las veces eso debería resultar en el mismo resultado.
RBarryYoung

para algunos cálculos necesita el subtotal dentro del cálculo. los promedios ponderados es uno de los muchos ejemplos

Respuestas:


2

Las filas subtotales son generalmente identificables (por ejemplo, con Averageo Count, o más a menudo y como en su caso con Total). Filtrar en 'En cada cambio en la columna' para contiene "Tot" para acceder solo a las filas subtotales.

Tenga en cuenta que, mientras está filtrado, los resultados pueden no parecer correctos, pero deben ajustarse adecuadamente cuando se quita el filtro.

Ejemplo SU585375


2

Tuve que hacer algo similar para una matriz de decisión ponderada con categorías que fueron ponderadas individualmente. La hoja de cálculo se ve así:

captura de pantalla de Excel

¿Dónde está el "#NOMBRE?" Lo que aparece son varias fórmulas que describiré. La hoja de cálculo se basa en macros: una vez que están habilitadas, el "#NAME?" la cosa desaparece y aparece el número correcto.

Cada categoría tiene varios criterios con pesos. Debajo de los criterios, se calculan los totales de categoría, pero en la fila a la izquierda de los totales hay una celda con la palabra "Categoría". Los puntajes de las categorías usan esta fórmula:

=ROUND(SUMPRODUCT(range_up($C83),range_up(D83))/SUM(range_up($C83)),1)

La fórmula anterior sería correcta si se ingresara en la celda D84 y el peso de la categoría estuviera en $ C84.

Los puntajes finales usan esta fórmula:

=sum_categories($B4:$B98,1,2)

donde "$ B4: $ B98" es el rango que contiene la palabra "Categoría", el "1" es cuántas columnas a la derecha de la columna "Categoría" aparecen los pesos, y el "2" es cuántas columnas a la derecha de la columna "Categoría" aparecen las puntuaciones (es decir, esta debería ser la columna en la que se encuentra la fórmula).

Las fórmulas anteriores usan dos funciones, range_up y sum_categories, que se proporcionan a continuación:

Function range_up(r As Range) As Range
  Dim t As Range, b As Range

  Application.Volatile

  Set b = r.Cells(1, 1) 'make sure it's only one cell

  If IsEmpty(b.Value) Then 'if cell is empty, start one cell up
    Set b = b.offset(-1)
  End If

  'end(xlup) has strange behaviour if cell above is blank, so fix it manually
  If IsEmpty(b.offset(-1)) Then
    Set t = b
  Else
    Set t = b.End(xlUp)
  End If
  Set range_up = t.Resize(b.Row - t.Row + 1)

End Function

Function sum_categories(r As Range, offset1 As Integer, offset2 As Integer) As Variant
  Dim sum As Variant
  Dim c As Range

  Application.Volatile

  sum = 0
  For Each c In r.Cells
    If c.Value = "Category" Then
      sum = sum + c.offset(0, offset1).Value * c.offset(0, offset2).Value
    End If
  Next c

  sum_categories = sum
End Function

Finalmente, si desea volver a calcular manualmente, incluya un botón en su formulario que llame a esta función:

Sub force_recalc()
  Application.CalculateFullRebuild
End Sub

1

¿El problema es solo en la presentación? Si es así, podría usar un condicional simple para ocultar la salida no deseada. =IF(RIGHT(B10,5)="Total",INDEX(Summary,A10),"") (Sustituya el ÍNDICE con cualquier fórmula que esté usando realmente)


-1

Si contrae todas las filas que no desea sobrescribir, puede pegar la fórmula haciendo lo siguiente:

  1. Copia la fórmula
  2. Resalte el área a la que desea aplicar la fórmula
  3. Vaya a "Ir a especial" (arriba a la derecha de la cinta de inicio, o CtrlSG y luego Alt + S)
  4. Seleccione solo celdas visibles, presione ok
  5. Pegar la fórmula

Espero que esto ayude

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.