Concatenar - Utilizando Indice

Visual Basic for Aplication e macros no Excel.
Regras do fórum
Sua dúvida foi respondida? Marque como RESOLVIDO em seus tópicos, usando o botão com marca verde. Imagem

Concatenar - Utilizando Indice

Mensagempor genilsonsb » Qua Out 11, 2017 4:05 pm

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 - 68335\nACETONA FARMAX 500ML - 68334\nAGUA OXIGENADA CREMOSA FARMAX 20 VOL. 90ML - 81012
BH-02 AGUA OXIGENADA CREMOSA FARMAX 20 VOL. 90ML - 81012\nAGUA OXIGENADA CREMOSA FARMAX 30 VOL. 90ML - 81013\nAGUA 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?
Você não está autorizado a ver ou baixar esse anexo.
genilsonsb
Membro
Membro
 
Mensagens: 2
Registrado em: Qua Out 11, 2017 3:31 pm
Has thanked: 0 time
Have thanks: 0 time

{ SO_SELECT }

Share on Facebook Facebook

Re: Concatenar - Utilizando Indice

Mensagempor Osvaldomp » Qua Out 11, 2017 5:34 pm

Experimente. Resultado na coluna 'D'.

Código: Selecionar todos
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
Osvaldo

For this post the author Osvaldomp thanked:
Patropi (Qui Out 12, 2017 9:32 am)
Osvaldomp
Membro
Membro
 
Mensagens: 416
Registrado em: Seg Mar 26, 2012 6:33 pm
Has thanked: 80 times
Have thanks: 215 times

Re: Concatenar - Utilizando Indice

Mensagempor genilsonsb » Qua Out 11, 2017 6:48 pm

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 - 68335\nACETONA FARMAX 500ML - 68334\nAGUA OXIGENADA CREMOSA FARMAX 20 VOL. 90ML - 81012

mas eu precisava de mais uma no final:

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

Como altero o seu codigo para atender essa expectativa?
genilsonsb
Membro
Membro
 
Mensagens: 2
Registrado em: Qua Out 11, 2017 3:31 pm
Has thanked: 0 time
Have thanks: 0 time

Re: Concatenar - Utilizando Indice

Mensagempor Osvaldomp » Qua Out 11, 2017 8:52 pm

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.
Código: Selecionar todos
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
Osvaldo
Osvaldomp
Membro
Membro
 
Mensagens: 416
Registrado em: Seg Mar 26, 2012 6:33 pm
Has thanked: 80 times
Have thanks: 215 times


Voltar para VBA & Macros

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 2 visitantes