Página 1 de 1

Macro para adicionar conteúdo a células já preenchidas

Enviado: 13 Ago 2018 às 08:30
por MSFT
Entendidos de plantão,

Após pesquisar e não encontrar solução para a situação que lhes apresento, decidi inscrever-me neste fórum para tentar obter aqui uma dica que resolva o seguinte problema:

Tenho uma planilha do Excel com quase 3 mil linhas e, numa certa coluna, preciso inserir em todas as células um determinado conteúdo sem apagar o já existente. O novo conteúdo só precisa "empurrar" o já existente para a direita e inserir-se no início.

Tentei gravar uma macro para isso, mas não consegui fazer com que ela *NÃO* substituísse todo o conteúdo da célula seguinte pelo da anterior.

Agradeço qualquer luz. :)

Macro para inserir conteúdo em células já preenchidas

Enviado: 13 Ago 2018 às 08:33
por gfranco
Bom dia.
Sugiro postar um modelo de sua planilha (com dados fictícios mas mesma estrutura)
Poste um modelo em excel (não uma imagem) de preferencia com uma demonstração manual do resultado pretendido.
Para anexar o arquivo, clique em +Resposta e localize a opção abaixo da janela de digitação de mensagens.

Re: Macro para adicionar conteúdo a células já preenchidas

Enviado: 13 Ago 2018 às 08:41
por MSFT
Obrigado pela resposta, gfranco. Segue em anexo o modelo solicitado.

Aguardo seus comentários.

Um abraço!

Re: Macro para adicionar conteúdo a células já preenchidas

Enviado: 13 Ago 2018 às 08:52
por gfranco
Amigo.
Veja se o que fiz te ajuda.
*Resposta útil ? Clique em "Obrigado"
**Sua dúvida foi sanada? Marque o tópico como "Resolvido"

Re: Macro para adicionar conteúdo a células já preenchidas

Enviado: 13 Ago 2018 às 09:10
por MSFT
gfranco, ajuda sim, muito obrigado.

O detalhe é que, na planilha onde a adição de conteúdo deve ser efetuada, a macro está agindo na coluna errada (uma antes).

Dei uma olhada no código VBScript e encontrei a seguinte linha:

ul = w.Cells(w.Rows.Count, "B").End(3).Row

Imaginei que o "B" fosse a coluna onde o código está agindo (porque no modelo que lhe mandei era a B) e troquei por "C", que seria a coluna correta. Mesmo assim, ele continua efetuando a adição na coluna errada.

Imaginei que, se eu eliminasse todas as outras colunas da planilha e deixasse só aquela em que preciso da adição de conteúdo (depois seria fácil copiar/colar o resultado na planilha definitiva), a macro seria forçada a atuar só nela. Mas ao rodá-la nessas circunstâncias ela não faz nada.

Como não entendo de VBScript, não descobri onde estaria o parâmetro que determina a coluna onde a adição deve ser realizada. Pode me dar um toque?

Muito obrigado!

Re: Macro para inserir conteúdo em células já preenchidas

Enviado: 13 Ago 2018 às 09:15
por gfranco
gfranco escreveu:Bom dia.
Sugiro postar um modelo de sua planilha (com dados fictícios mas mesma estrutura)
Poste um modelo em excel (não uma imagem) de preferencia com uma demonstração manual do resultado pretendido.
Para anexar o arquivo, clique em +Resposta e localize a opção abaixo da janela de digitação de mensagens.
Observe a menção que eu fiz sobre mesma estrutura

Substitua o código anterior por este:
Código: Selecionar todos
Sub main()
    Dim ul As Long
    Dim palavraParaAcrescentar As String
    Dim w As Worksheet
    Dim i As Long
    Dim anterior As String
    
    Set w = Planilha1
    
    ul = w.Cells(w.Rows.Count, "c").End(3).Row
    
    If ul < 3 Then Exit Sub
    
        If w.ProtectContents = True Then
            MsgBox "Impossível executar em planilha protegida"
            Exit Sub
        End If
    
    If w.AutoFilterMode Then w.AutoFilterMode = False
    
    palavraParaAcrescentar = "[ABC]"
    
        For i = 3 To ul
        
        anterior = VBA.CStr(w.Cells(i, 3))
        
        w.Cells(i, 3) = palavraParaAcrescentar & " " & anterior
        
        Next i
    
    Set w = Nothing


End Sub

Re: Macro para adicionar conteúdo a células já preenchidas

Enviado: 13 Ago 2018 às 09:24
por osvaldomp
Experimente:
Código: Selecionar todos
Sub InsereString()
 Dim c As Range
  Application.ScreenUpdating = False
   For Each c In Range("C3:C" & Cells(Rows.Count, 3).End(3).Row)
    c.Value = "[ABC] " & c.Value
   Next c
  Application.ScreenUpdating = True
End Sub