Notifications
Clear all

Concatenar - Utilizando Indice

4 Posts
2 Usuários
0 Reactions
943 Visualizações
(@genilsonsb)
Posts: 0
New Member
Topic starter
 

Prezados, muito boa tarde!

Estou com uma missão muito complicada utilizando VBA: preciso concatenar linhas de acordo com um indice. Por exemplo:

LOJA PRODUTO
BH-01 ACETONA FARMAX 100ML - 68335
BH-01 ACETONA FARMAX 500ML - 68334
BH-01 AGUA OXIGENADA CREMOSA FARMAX 20 VOL. 90ML - 81012
BH-02 AGUA OXIGENADA CREMOSA FARMAX 20 VOL. 90ML - 81012
BH-02 AGUA OXIGENADA CREMOSA FARMAX 30 VOL. 90ML - 81013
BH-02 AGUA OXIGENADA CREMOSA FARMAX 40 VOL. 90ML - 81014

Preciso concatenar as linhas de produto de acordo com o codihgo da loja, ficando assim:

LOJA CONCATENADO
BH-01 ACETONA FARMAX 100ML - 68335nACETONA FARMAX 500ML - 68334nAGUA OXIGENADA CREMOSA FARMAX 20 VOL. 90ML - 81012
BH-02 AGUA OXIGENADA CREMOSA FARMAX 20 VOL. 90ML - 81012nAGUA OXIGENADA CREMOSA FARMAX 30 VOL. 90ML - 81013nAGUA OXIGENADA CREMOSA FARMAX 40
VOL. 90ML - 81014

Sendo que, "n" é o meu separador de produtos.
Na planilha em anexo (Mix.xlsm), tenho uma function (gfConcatenar) que já executa a concatenação, porém tenho que fazer uma a uma. A ideia é ter uma macro que eu ja faça todo o processo, independente da quantidade de informação que eu incluir na planilha de dados.
Voces podem me ajudar?

 
Postado : 11/10/2017 1:05 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

Experimente. Resultado na coluna 'D'.

Sub ConcatLoja()
 Dim k As Long, x As Long, m As Long, LR As Long
 [D:D] = ""
 For k = 2 To Cells(Rows.Count, 1).End(3).Row
  x = Application.CountIf([A:A], Cells(k, 1))
   LR = Cells(Rows.Count, 4).End(3).Row
   For m = 0 To x - 1
    Cells(LR + 1, 4) = Cells(LR + 1, 4) & "n" & Cells(k + m, 2)
   Next m
   Cells(LR + 1, 4) = Right(Cells(LR + 1, 4), Len(Cells(LR + 1, 4)) - 2)
  k = k + x - 1
 Next k
End Sub
 
Postado : 11/10/2017 2:34 pm
(@genilsonsb)
Posts: 0
New Member
Topic starter
 

Osvaldo, sensacional!!! Resolveu meu problema!!!

Porém, eu precisava colocar mais um "n" no final da string. No meu caso ficou assim:

ACETONA FARMAX 100ML - 68335nACETONA FARMAX 500ML - 68334nAGUA OXIGENADA CREMOSA FARMAX 20 VOL. 90ML - 81012

mas eu precisava de mais uma no final:

ACETONA FARMAX 100ML - 68335nACETONA FARMAX 500ML - 68334nAGUA OXIGENADA CREMOSA FARMAX 20 VOL. 90ML - 81012n

Como altero o seu codigo para atender essa expectativa?

 
Postado : 11/10/2017 3:48 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

Acrescente a parte em vermelho:

Cells(LR + 1, 4) = Right(Cells(LR + 1, 4), Len(Cells(LR + 1, 4)) - 2) & "n"

Se você quiser experimentar também o código abaixo, o resultado será igual porém a execução será mais rápida do que o código anterior.

Sub ConcatLojaV2()
 Dim k As Long, x As Long, m As Long, LR As Long, r As String
  [D:D] = ""
  For k = 2 To Cells(Rows.Count, 1).End(3).Row
   x = Application.CountIf([A:A], Cells(k, 1))
   LR = Cells(Rows.Count, 4).End(3).Row
    For m = 0 To x - 1
     r = r & "n" & Cells(k + m, 2)
    Next m
   Cells(LR + 1, 4) = Right(r, Len(r) - 2) & "n"
   k = k + x - 1: r = ""
  Next k
End Sub
 
Postado : 11/10/2017 5:52 pm