Ir ao conteúdo

Posts recomendados

Postado

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                    [email protected]

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

Postado
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?

Postado

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 

Postado

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.

Postado

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

Postado

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.

Postado

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 :(

 

Postado

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

  • 2 semanas depois...
Postado

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 .. 

Postado

@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

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!