Como faço para mesclar Células Duplicadas Col A Enquanto Resumindo Seus Valores Em Col C Enquanto Puxando Seus Identificadores No Col B Excel 2013 Usando o VBA [closed]

1

Isso é o que eu quero.

MesclarduplicatasdacolunaA
PuxeatravésdeidentificadoresdacolunaB
ValoresdesomadacolunaC

SubSkuSorter()DimxAsLong,yAsLongDimrngAsRangeDimwSrcAsWorksheet:SetwSrc=Sheets("AR Received SKU's List 1")

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With

With wSrc
    x = .Range("A" & .Rows.Count).End(xlUp).Row
    Set rng = .Range("A1:A" & x)
    y = .Cells(1, .Columns.Count).End(xlToLeft).Column + 2
    rng.AdvancedFilter Action:=xlFilterCopy, copytoRange:=.Cells(1, y), unique:=True
    Z = .Cells(.Rows.Count, y).End(xlUp).Row
    y = y + 1
    .Cells(1, y).Value = "Total"
    .Range(.Cells(2, y), .Cells(Z, y)).Formula = _
        "=SUMIF(" & rng.Address & "," & .Cells(2, y - 1).Address(False, False) & "," & rng.Offset(, 1).Address & ")"
End With

With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With

End Sub
    
por user517378 03.11.2015 / 17:50

1 resposta

1

Espero que você olhe aqui novamente.
Eu darei uma resposta onde nenhum VBA é necessário e tentarei explicar cada detalhe.

Usando a imagem que você compartilhou, criei uma planilha própria:

Começamos em F2 , que é o item mais importante. Simplesmente =A2 fará isso.
Nada muito para explicar aqui.

Em G2 vem =IF(LEN(F2),INDEX(B:B,MATCH(F2,A:A,0)),"") . Sabendo que a segunda coluna sempre será a mesma para a primeira coluna, ela simplesmente procura a correspondência exata de F2 no intervalo A:A ( MATCH ) e imprime o que estiver em B:B na mesma linha. (Para no primeiro item encontrado, enquanto não importa, é sempre o mesmo). LEN apenas impede que mostre #NA se a cadeia de pesquisa estiver vazia e também ignora todo o cálculo da matriz.

Em H2 vem o que você sugeriu =IF(LEN(F2),SUMIF(A:A,F2,C:C),"") . Ele simplesmente soma todos os valores na coluna C que possuem o termo de pesquisa fornecido na coluna A . O LEN -part é o mesmo que o de G2 , embora não apareça um erro, ele exibirá 0 . No entanto, você ainda receberá um zero se houver um termo de serch e a soma for 0 .

Enquanto você pode simplesmente preencher automaticamente G2 e H2 para baixo o quanto precisar, não funcionará para F2 . Mas você pode fazer isso com a seguinte fórmula em F3 :

=IF(LEN(F2),IFERROR(INDEX(A:A,MATCH(1,(COUNTIF(F$2:F2,A$2:A$1000)=0)*(A$2:A$1000<>""),0)+1),""),"")

This is an array formula and must be confirmed with Ctrl+Shift+Enter.

Ele começa com COUNTIF , que simplesmente retorna um array binário, enquanto cada item recebe um 1 se corresponder a qualquer string de pesquisa, todos os outros obtêm 0 (procurando por todas as strings acima de si F$2:F2 ). Como não queremos obter um item já usado, transformamos todos 0 TRUE ( =0 ). Também não queremos um item empty , então também verificamos isso ( A$2:A$1000<>"" ). Multiplicar 2 matrizes booleanas é o mesmo que ter um AND para cada par de itens, enquanto o AND real deve verificar se todos os itens em matrizes estão em TRUE . No entanto, a multiplicação novamente nos fornece um array binário com 1 em cada item que não está vazio e não é usado. MATCH agora verifica o primeiro 1 e retorna seu número de posição (linha). Mas a partir da segunda linha nos dá um deslocamento que é anulado com +1 . Tendo a posição, INDEX nos dá a string que precisamos. IFERROR é somente para a primeira solução empty que retornaria #NA . E o LEN simplesmente pula os cálculos para todas as células após o primeiro vazio.
Usando o assistente de fórmulas para ver o que realmente calcula também ajuda a compreensão. Mas sempre doublecheck todo o $ ou o preenchimento automático pode falhar.

Se você ainda precisar perguntar algo, basta escrever um comentário. :)

    
por 08.11.2015 / 05:46