Subtotales con rango variable vba

Nuevamente acudo a su ayuda, espero no ser inoportuno.

Estuve buscando tanto en esta comunidad como por la web y no logro sacar este interrogante que tengo.

Tengo una tabla con una cantidad X de filas y luego de ordenarlas con un criterio necesito realizar una función de subtotales a partir de cierta columna en adelante (o sea hacia la derecha), el tema que a veces son pocas columnas que deberían ir con subtotales y a veces hay más cantidad.

Les dejo un archivo como muestra de mi tabla:

https://app.box.com/s/yjihxv7rk4mc7pwqg1bsy9eqehc3y94l 

En este ejemplo los subtotales irían a partir de la columna "P" en adelante.

Leí por ahí que uno puede definir esas columnas con el comando "currentregion" pero la verdad no logro dar en el clavo.

Respuesta
2

Tienes razón, con mi pobre ejemplo es complicado entenderme (perdón!). Adjunto nuevamente como tengo la planilla antes del proceso:

https://app.box.com/s/t55mb027g5xkza90ybsrpfcivxzsx8vc 

Lo que quiero es que en cada variación de "codigo" se genere un renglón vacío con los totales de las ventas que tuvo ese articulo. Las ventas comienzan en la columna "P" así que desde allí comienzan los subtotales, tal cual como lo hace la función "subtotal" que Excel nos entrega en el botón.

Adjunto un ejemplo "terminado" que seria el resultado deseado:

https://app.box.com/s/8fwcjnkuwgwftyu0rlvlb0uqqul3zwax 

Cabe destacar que acá manejo 67 columnas, pero a veces son más y otras menos. También la cantidad de registros son muchos mayores, por ende más cantidad de subtotales.

Insistiendo en el tema y buscando alternativas me cruce con un código que no supe manipular muy bien del todo, ya que cuando lo modificaba me arrojaba error, pero así tal cual como lo transcribo funciona de lujo. Esta función busca los cambios en la fila A y cuando los encuentra crea el subtotal a todas las columnas que tenga adyacentes, por ende si tenemos 5 comunmas o 100 les va a crear la sumatoria debajo a cada una dejando el famoso "Totales XXXX" (siendo XXXX el valor que estaba en la columna A). Después rebuscando un poco pude eliminar los subtotales que no quería. Si alguien es tan amable de explicar línea por línea de este código seria buenísimo para poder comprender como lo hace y adaptar el código a las necesidades, caso contrario de todas formas dejo el código que seguro a muchos les ayudara.

Código:

Dim TotColumns()
    Dim I As Integer
    FinalCol = Cells(3, 255).End(xlToLeft).Column
    ReDim Preserve TotColumns(1 To FinalCol - 2)
    For I = 3 To FinalCol
    TotColumns(I - 2) = I
    Next I
    Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=TotColumns, _
    Replace:=True, PageBreaks:=False, SummaryBelowData:=True

1 respuesta más de otro experto

Respuesta
2

No sé si conoces, Paulo, que para el Excel NO es lo mismo hablar de "Totales" que de "Subtotales". Éste último se trata de un método muy específico que atiende a reglas muy específicas.
Para aclarar -entonces- las cosas te re-pregunto:

- En el ejemplo con dos filas de datos que estás mostrando: ¿Exactamente donde es que quieres que salgan los totales/subtotales?... ¿A partir de P5? ¿A partir de P4? ¿En la fila 2 y bajado todo el conjunto de la información?...
¡En fin!

¡Ahora si!... ¡Estábamos hablando de nuestros "viejos y queridos" Subtotales!
(Jajajjjjjajaaaja)
En tal caso, Paulo, intenta con:

Dim mCol
mCol = Evaluate("column(" & Range([p1], [p1].End(xlToRight).Offset(, -2)).Address & ")")
[a1].CurrentRegion.Subtotal GroupBy:=4, Function:=xlSum, TotalList:=mCol, _
  Replace:=True, PageBreaks:=False, SummaryBelowData:=True
La pregunta no admite más respuestas

Más respuestas relacionadas