Excel - Una macro para agrupar por columna y sumar valores

El software Microsoft Office comprende Microsoft Excel, que es una aplicación de hoja de cálculo con tablas gráficas, cálculos, un lenguaje de programación macro, llamado VBA (Visual Basic Basics for Applications) y tablas dinámicas. Se usa una tabla dinámica para enumerar datos; reconoce y resume esos datos para obtener resultados específicos. Una macro representa una lista de comandos o acciones para hacer que los datos largos o las tareas repetitivas en Excel Office Software sean más rápidas; Esto se puede ejecutar siempre que necesite realizar la tarea. Toma los valores, realiza la operación requerida y devuelve el valor en consecuencia. Si desea escribir una macro para agrupar por columna y valor de suma, simplemente inicie la macro utilizando los comandos relevantes.

Problema

Necesito escribir una macro para el siguiente ejemplo:

 Artículo Cantidad Longitud A 1 100 A 1 100 B 2 200 B 1 100 B 5 100 C 4 200 C 2 100 C 1 200 C 3 100 

Básicamente, quiero agrupar por Columna A (es decir, Artículo) y Columna C (es decir, longitud) y también quiero agregar el total de cada cambio en longitudes, para un artículo. En este caso, el resultado en la nueva hoja sería el siguiente:

 Artículo Cantidad Longitud A 2 100 B 2 200 B 6 100 C 5 200 C 5 100 

Espero que esto tenga sentido.

¿Puede alguien ayudarme a escribir una macro de Excel para esto por favor?

Solución

Prueba esto

Suposición:

  • 1. Cuando inicie una macro, la hoja desde la que se copiarán los datos es la hoja activa.
  • 2. Una celda vacía en la columna A indica el final de los datos
  • 3. Desea pegar en la hoja 3 (correcto en macro si ese no es el caso)

 Sub consolidateData () Dim lRow As Long Dim ItemRow1, ItemRow2 As String Dim lengthRow1, lengthRow2 As String Columns ("A: C"). Seleccione Selection.Copy Sheets ("Sheet3"). Seleccione Range ("A1"). Seleccione ActiveSheet Celdas pasadas. Seleccione Selección. Orden _ Tecla1: = Rango ("A2"), Orden1: = xLescala, _ Tecla2: = Rango ("C2"), Orden2: = xlDescendiente, _ Encabezado: = xlSí, Orden personalizado: = 1, _ MatchCase: = False, Orientación: = xlTopToBottom, _ DataOption1: = xlSortNormal lRow = 2 Do While (Células (lRow, 1) "") ItemRow1 = Cells (lRow, "A") ItemRow2 = Cells (lRow + 1, "A") lengthRow1 = Células (lRow, "C") lengthRow2 = Cells (lRow + 1, "C") If ((ItemRow1 = ItemRow2) And (lengthRow1 = lengthRow2)) Entonces Cells (lRow, "B") = Células (lRow, "B") + Células (lRow + 1, "B") Rows (lRow + 1) .Delete Else lRow = lRow + 1 End If Loop End Sub 

Nota

Gracias a rizvisa1 por este consejo en el foro.

Artículo Anterior Artículo Siguiente

Los Mejores Consejos