Em primeiro lugar, acho que você teria mais sorte a longo prazo se estivesse armazenando seus dados em uma forma mais horizontal, por exemplo,
Store Product Qty Sales
Store 1 A 1 4.00
Store 1 B 0 0.00
Store 1 C 2 4.00
Store 1 D 0 0.00
É muito mais fácil fazer pesquisas em uma única coluna, em vez de pares de colunas.
(Dependendo do tamanho e da escala, um banco de dados do Access com tabelas separadas de Loja, Produto e Vendas pode até ser melhor do que isso)
Dito isto, se você está preso com o que tem e pode manipular uma macro VBA em sua planilha, tente o seguinte:
-
Adicione um módulo de classe ao seu projeto do VBA, chamado
Tuple
, contendo:Private szKey As String Private nValue As Double Public Property Get Key() As String Key = szKey End Property Public Property Let Key(newKey As String) szKey = newKey End Property Public Property Get Value() As Double Value = nValue End Property Public Property Let Value(newValue As Double) nValue = newValue End Property
-
Adicione um módulo normal, por ex.
Module 1
para o seu projeto, contendo:Public Function Summarize(ByRef rng As Range) As String If rng.Cells.Count Mod 2 = 1 Then Err.Raise 100, "", "Expected range of even cells" Dim coll As New Collection On Error Resume Next Dim flag As Boolean: flag = False Dim prevCel As Range, cel As Range: For Each cel In rng.Cells If flag Then Dim Key As String: Key = "" & prevCel.Value2 coll(Key).Value = coll(Key).Value + cel.Value2 If Err.Number <> 0 Then Err.Clear Dim t1 As New Tuple t1.Key = "" & prevCel.Value2 t1.Value = cel.Value2 coll.Add t1, Key Set t1 = Nothing End If End If Set prevCel = cel flag = Not flag Next cel On Error GoTo 0 Dim t2 As Variant: For Each t2 In coll If Len(Summarize) Then Summarize = Summarize & ", " Summarize = Summarize & Format(t2.Key, "#0.00") & " @ " & t2.Value Next t2 End Function
-
Em seguida, na planilha, você poderia inserir uma fórmula, como:
="Product " & $A2 & " has " & Summarize($B2:$I2)
Certifique-se de substituir o intervalo $ B2: $ I2 por um que seja amplo o suficiente para cobrir todos os números possíveis de Lojas. Além disso, certifique-se de usar um intervalo de tamanho uniforme (porque os valores Sale / Qty estão em pares), caso contrário, você receberá um erro
#VALUE
.