¿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.