Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
ViniciusNunesT

Excel Unir Linhas que tem a Primeira coluna igual.

Recommended Posts

Bom dia Pessoal que é especialista ! 

 

Sou um estudante de sistemas de informação porém não consegui resolver esse problema .

Poderia me ajudar com isso, vou explicar detalhadamente. 

 

Tenho uma planilha de 3000 linhas, que são de revendas que já vem com a coluna C masclada  com o nome da revenda, onde por meio de uma macro que desfaz a mesclagem e mantem os valores das celulas mascladas em todas linhas e assim  consigo pegar dados por meio de uma proc v de local e id. que são as colunas A ( ID ) e B (LOCAL).

image.thumb.png.480b54e7e453adad7daa5d0716dd9112.png

Macro que uso para as celulas mascladas voltarem a ser linhas comuns e manter o valor é :

Citação

Sub Desmesclar_Mantendo_valores_nas_células()
Dim Rng As Range
For Each Rng In Application.Selection
    If Rng.MergeCells Then
        With Rng.MergeArea
            .UnMerge
            .Formula = Rng.Formula
        End With
    End If
Next
End Sub
 

 

 

Porém eu uso esses dados para enviar uma Mala Direta através do Yet Another Mail Merge que é uma extensão do google, que permite pegar os dados de cada linha por meio do titulo da coluna. 

 

O que estou tentando fazer,  todas as linhas que tem ID iguais juntarem as linhas, mas mantendo sua formatação , para que quando eu envie o e-mail elas se mantenham como uma tabela por exemplo.

 

 

REVENDA X - VENDA JANEIRO - VENDA FEVEREIRO  EMAIL

JOSE A              3                                            5   

JOSE B              4                                           6                    revenda1@revenda1.gg

JOSE C              7                                           8

 

 

isso tudo em uma linha para que quando eu envie o e-mail ele puxe dessa maneira .

 

Consegue me ajudar?

 

 

 

 

 

 

 

AJUDAME.xlsx

Editado por ViniciusNunesT
português

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, ViniciusNunesT disse:

...O que estou tentando fazer,  todas as linhas que tem ID iguais juntarem as linhas, mas mantendo sua formatação , para que ...se mantenham como uma tabela.

... isso tudo em uma linha.

 

Não entendi muito bem... você quer colocar cada grupo de linhas referente a cada ID numa String? Se sim, como você separaria as colunas? com um caractere de tabulação, vírgula ou ponto-e-vírgula? E as linhas com um caractere de retorno de carro e alimentação de linha (vbCrLf)? Ou faria um arquivo semelhante a um arquivo csv?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que expliquei mal, eu preciso que aquelas linhas fiquem assim, lembrando que fiz isso na mão para mostrar. 

 

image.thumb.png.185a92f7b8fa65c544c02663ca3db607.png

 

Por que ai quando eu fizer a mala direta vai ficar assim .

 

image.png.d659de51a9accad9bd8a2ece663b3055.png

 

Chamando cada coluna para ficar como uma tabela..

 

 

Essa foi a unica maneira que pensei para realizar isso . Espero que tenha ficado mais claro 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente não continuei por que fiquei confuso, não compreendi completamente sua demanda :oops: pois no primeiro post você mostra um código "para as celulas mascladas voltarem a ser linhas comuns" e no último post quando você diz "preciso que aquelas linhas fiquem assim"  a imagem mostra até mais intervalos mesclados do que no original. Também não consegui correlacionar com o trecho que mostra como ficaria a mala direta.

 

O ideal seria você anexar um arquivo (preenchido manualmente) contendo exatamente como você necessita a saída final de seus valores para a amostra dos dados preenchidos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que eu agora consegui ser claro, fiz o arquivo de entrada e saida, eu meio que preciso juntar todas informações em um unica célula. 

 

O único problema que preciso que una apenas as que são de uma mesma "revenda" como mostro no arquivo em anexo..

Pois ou enviar mala direta via e-mail e vai ficar mais ou menos assim : 

Além de estarem na mesma célula preciso simular uma tabela dentro dessa célula, preciso juntar isso tudo em uma célula pois a mala direta envia linha a linha, usando yet e-mail merge. isso facilitaria muito minha vida.

 

image.png.5ec1c9a0ec35c52706df39ed1942e135.png

AJUDAME.xlsx

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tentei algumas coisas esse fds mas nada deu certo :/ teve alguma ideia ? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, mas só posso fazer nas horas de folga e como veio o fds... hj à noite posso continuar.

A propósito, se ao invés de inserir os valores numa célula eles fossem inseridos numa caixa de texto ou num arquivo txt o layout ficaria melhor, mais parecido com uma tabela, porque daria pra separar os campos com caracteres de tabulação, os quais são impossíveis de serem inseridos em uma célula.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o Unico porém é que para realizar essa mala direta ele lê apenas 1 linha, então pega o e-mail que tem na coluna e-mail e envia os dados dessas colunas dessa unica linha, poderia até separar em mais colunas, seria possível ? só que estou preso em apenas uma linha :(

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá uma olhada.

Obs.: pra colocar numa célula só as 7 colunas terá sempre esse problema de alinhamento pois mesmo se quiséssemos considerar a quantidade de caracteres de uma linha para alinhar com a outra, ainda sim a largura de um caractere (i, por exemplo) é diferente de outros (W, por exemplo).

O ideal seria um caractere de tabulação, mas aí o Excel engole (transforma em espaço em branco). Só mesmo numa string ou num arquivo txt ou numa caixa de texto.

AJUDAME2.zip

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficou muito bom tem alguns poréns que gostaria de sua ajuda.

 

Como faço para manter o valor?

Me ajuda com algumas coisas basicas, comentando o código com o que ta fazendo cada linha? por aprendizado mesmo .. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ViniciusNunesT bom dia...

 

Em 07/05/2018 às 15:26, ViniciusNunesT disse:

Me ajuda com algumas coisas basicas, comentando o código com o que ta fazendo cada linha? por aprendizado mesmo .. 

 

Então vamos lá:

Sub Rearranjo()
  'Define o intervalo de entrada como sendo toda área em volta de A1:
  Dim rg As Range: Set rg = Worksheets("ENTRADA").[A1].CurrentRegion
  'Define início do intervalo de saída:
  Dim rgSaída As Range: Set rgSaída = Worksheets("SAIDA").Range("A1:E1")
  'Define variáveis gerais: rg2 conterá o intervalo de vendas para cada revenda
  'i e j servirão para percorrer cada lin/col de rg2 concatenando as strings do Cabeçalho
  'com os valores de rg2. NúmLin1 e 2 servem para checar se todo intervalo foi percorrido,
  'já que são de células mescladas:
  Dim rg2 As Range, i As Long, j As Long, NúmLin1 As Long, NúmLin2 As Long
  'b é uma variável temporária que conterá a cada passada o valor de cada linha de rg2
  'até elas terminarem. Cabeçalho tem o título que irá aparecer antes de todo valor para
  'identificá-lo:
  Dim b, Cabeçalho
  Cabeçalho = Array("ID: ", "LOCAL: ", "REVENDA: ", "VENDEDOR: ", _
            "VENDA " & Trim(rg.Cells(1, 5)) & ": ", "QUANTIDADE " & Trim(rg.Cells(1, 6)) & ": ", _
            "VENDA " & Trim(rg.Cells(1, 7)) & ": ", "QUANTIDADE " & Trim(rg.Cells(1, 8)) & ": ", _
            "VENDA TOTAL: ", "QUANTIDADE TOTAL: ", "EMAIL: ")
  'Reduz rg de tabela inteira para trabalhar somente com a coluna das revendas, já que
  'identifica cada agrupamento:
  Set rg = rg.Coumns(3)
  'Verifica quantas linhas há para serem processadas:
  NúmLin1 = rg.Rows.Count
  'Inicia o loop:
  Do
    'Reduz rg para ir descendo toda a coluna C de célula em célula ou, se mesclada,
    'o conjunto das mescladas:
    Set rg = rg.Cells(1).MergeArea
    'Verifica: se de fato estão mescladas é porque é uma Revenda:
    If rg.MergeCells Then
      'Pega todo o intervalo de 1 coluna à direita de cada Revenda e com tamanho de 7
      'colunas,ou seja, dados das vendas de cada revenda de Vendedor até Total.
      'Offset e/ou Resize correspondem à função DESLOC no Excel:
      Set rg2 = rg.Offset(0, 1).Resize(rg.Rows.Count, 7)
      'Pra cada linha dos detalhes de venda de cada revenda:
      For i = 1 To rg2.Rows.Count
        'Pra cada coluna entre Vendedor e Total Quantidade
        For j = 1 To 7
            'Concatena todas as células das 7 colunas do intevalo. Também verifica se é
            'a primeira linha, já que é diferente das demais. Também insere 10 espaços em
            'branco entre uma informação e outra:
            b = b & IIf(rg2.Cells(i, j) <> "Total", Cabeçalho(j + 2), "") & rg2.Cells(i, j) & String(10, " ")
        Next j
        'Insere um parágrafo ao final de cada linha
        b = b & vbCrLf
      Next i
      'Desloca a primeira linha 50 espaços para que Total pareça alinhado com nome vendedor.
      'Retira a marca de parágrafo e espaços a mais ao final do conjunto de linhas concatenadas:
      b = String(50, " ") & Trim(Left(b, Len(b) - 2))
      'Saída dos dados: Insere "ID: " e valor do ID na coluna A:
      rgSaída.Cells(1).Value = Cabeçalho(0) & rg.Cells(1).Offset(0, -2).Value
      'Saída dos dados: Insere "Local: " e valor do Local na coluna B:
      rgSaída.Cells(2).Value = Cabeçalho(1) & rg.Cells(1).Offset(0, -1).Value
      'Saída dos dados: Insere "Revenda: " e valor da Revenda na coluna C:
      rgSaída.Cells(3).Value = Cabeçalho(2) & rg.Cells(1).Offset(0, 0).Value
      'Saída dos dados: Insere os valores concatenados (detalhes das vendas) na coluna D:
      rgSaída.Cells(4).Value = b
      'Saída dos dados: Insere "E-mail: " e valor do Email na coluna E:
      rgSaída.Cells(5).Value = Cabeçalho(10) & rg.Cells(1).Offset(0, 8).Value
      'Posiciona-se na próxima linha para receber a próxima remessa de dados:
      Set rgSaída = rgSaída.Offset(1, 0)
      'Zera a variável para o próximo loop
      b = Null
    End If
    'Acumula a quantidade de linhas já processadas com as da passada atual:
    NúmLin2 = NúmLin2 + rg.Rows.Count
    'A vantagem do método Offset abaixo é que se houver linhas mescladas, ele avança
    'não de uma em uma linha, mas para a próxima linha após o conjunto de linhas mescladas
    Set rg = rg.Cells(1).Offset(1)
  'Testa se já processou todas as linhas:
  Loop Until NúmLin2 >= NúmLin1
  'Ativa a planilha de Saída para exibir o resultado:
  rgSaída.Parent.Activate
  'Esvazia as variáveis objeto
  Set rg = Nothing: Set rg2 = Nothing: Set rgSaída = Nothing
End Sub

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×