Excel - Uma macro para agrupar por coluna e valores de soma
O Microsoft Office Software compreende o Microsoft Excel, que é um aplicativo de planilha com tabelas gráficas, cálculos, uma linguagem de programação de macro, chamada VBA (Visual Basics for Applications) e tabelas dinâmicas. Uma tabela dinâmica é usada para listar dados; Ele reconhece e resume esses dados para obter resultados especificados. Uma macro representa uma lista de comandos ou ações para agilizar os dados demorados ou tarefas repetitivas no software do Office Excel. isso pode ser executado sempre que você precisar executar a tarefa. Ele pega os valores, executa a operação necessária e retorna o valor de acordo. Se você quiser gravar uma macro para agrupar por coluna e somar valor, basta iniciar a macro usando os comandos relevantes.
Questão
Eu preciso escrever uma macro para o exemplo a seguir:
Item Qtde Comprimento 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
Basicamente eu quero agrupar pela coluna A (ou seja, item) e coluna C (ou seja, comprimento) e também deseja adicionar o total de cada alteração em comprimentos, para um item. Nesse caso, o resultado na nova planilha seria o seguinte:
Item Qtd. Compr. A 2 100 B 2 200 B 6 100 C 5 200 C 5 100
Espero que isso faça sentido.
Alguém pode me ajudar a escrever uma macro do Excel para isso, por favor?
Solução
Tente isso
Suposição:
- 1. Quando você inicia uma macro, a planilha de onde os dados devem ser copiados é a planilha ativa
- 2. Uma célula vazia na coluna A indica o fim dos dados
- 3. Você deseja colar na planilha 3 (correta na macro, se não for o caso)
Sub consolidateData () Dim lRow As Long Dim ItemRow1, ItemRow2 As String Dim lengthRow1, lengthRow2 As String Columns ("A: C"). Selecione Selection.Copy Sheets ("Sheet3"). Selecione Range ("A1"). Selecione ActiveSheet Células de pasta.Selecione Selection.Sort _ Chave1: = Faixa ("A2"), Ordem1: = xlAscendente, _ Chave2: = Faixa ("C2"), Ordem2: = xlDescendente, _ Cabeçalho: = xlYes, OrdemCustom: = 1, MatchCase: = False, Orientação: = xlTopToBottom, _ DataOption1: = xlSortNormal lRow = 2 Do While (Células (lRow, 1) "") ItemRow1 = Células (lRow, "A") ItemRow2 = Células (lRow + 1, "A") lengthRow1 = Células (lRow, "C") lengthRow2 = Células (lRow + 1, "C") Se ((ItemRow1 = ItemRow2) E (lengthRow1 = lengthRow2)) Então Células (lRow, "B") = Células (lRow, "B") + Células (lRow + 1, "B") Filas (lRow + 1) .Excluir Else lRow = lRow + 1 End Se o Loop End Sub
Nota
Graças a rizvisa1 por esta dica no fórum.