3
respostas

Prompt

Prompt feito no GEMINI:
No excel, eu tenho a planilha com dados de clientes, em que na aba Planilha1 são os apresentados os dados crus e que precisar ser "limpos".
Essa planilha possue 4 colunas nessa exata ordem: ID_Cliente, Clientes, Total Investido, E-mail Interno Cliente.
Eu preciso de um código em VBA para fazer as seguintes ações:

  1. A planilha original seja duplicada e renomeada com a seguinte formatação de nome Revisa, depois com as informaçãoes de hora, minuto e segundo em que ela foi duplicada (Ex: Revisada 2025 10 20).
  2. Na coluna ID_Cliente (coluna A), adicionar o texto "Byte_" antes do contéudo de cada célula (Ex: 1001, viraria Byte1001).
  3. Na coluna Clientes (coluna B), remover os seguintes caracteres especiais: &, %, #, *, $ do contéudo de cada linha (Ex: ####No&me Cliente# 1004 se tornaria Nome Cliente 1004.
  4. Na coluna Total Investido (coluna C), o conteúdo original é de uma string, então ele deve ser transformado em formato de moeda em real. Remover do contéudo original da célula "R$ ". O restante é uma string que lembra um número como o exemplo: R$ 25,000.00 que deve virar: R$ 25.000,00, isto é, marcado de milhares e duas casas decimais.
  5. No campo E-mail interno cliente (coluna D), substituir o contéudo da célula pelo endereço de email do cliente que deve ser criado, usando o contéudo da coluna A concatenado com o seguinte texto: @bytebank.com.br.
  6. Por mim, isso deve ser formatado com tabela, em que cabeçalho seja formatado com a cor azul claro, as fontes sejam colocadas em negrito e as celulas sejam centralizadas.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
3 respostas

Sub ProcessarDadosClientes()

' --- 1. CONFIGURAÇÃO INICIAL ---
Dim wsFonte As Worksheet
Dim wsRevisao As Worksheet
Dim nomeNovaAba As String
Dim ultimaLinha As Long
Dim i As Long
Dim tbl As ListObject
Dim rngDados As Range
Dim tempString As String
Dim charsToRemove As Variant
Dim char As Variant

' Desativa a atualização de tela para a macro rodar mais rápido
Application.ScreenUpdating = False
Application.DisplayAlerts = False ' Desativa alertas (ex: ao excluir aba)

' Tenta encontrar a planilha de origem
On Error Resume Next
Set wsFonte = ThisWorkbook.Worksheets("Planilha1")
On Error GoTo 0

' Se não encontrar a "Planilha1", avisa o usuário e para a macro
If wsFonte Is Nothing Then
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    MsgBox "A aba 'Planilha1' não foi encontrada! Verifique o nome da aba.", vbCritical, "Erro"
    Exit Sub
End If

' --- 2. DUPLICAR E RENOMEAR A ABA (Tarefa 1) ---

' Define o nome da nova aba.
' Usei o formato "Revisada AAAA-MM-DD" que é melhor para ordenação.
' O seu exemplo "Revisada 2025 10 20" sugere a DATA, e não HORA:MINUTO:SEGUNDO.
nomeNovaAba = "Revisada " & Format(Now, "YYYY-MM-DD HH-MM-SS")

' Se uma aba com esse nome já existir, ela será excluída antes
On Error Resume Next
ThisWorkbook.Worksheets(nomeNovaAba).Delete
On Error GoTo 0

' Copia a "Planilha1" para depois dela mesma
wsFonte.Copy After:=wsFonte
' Define a nova aba copiada como nossa "wsRevisao"
Set wsRevisao = ActiveSheet
' Renomeia a nova aba
wsRevisao.Name = nomeNovaAba


' --- 3. PROCESSAMENTO DOS DADOS (Tarefas 2, 3, 4, 5) ---

' Encontra a última linha com dados na Coluna A (ID_Cliente)
ultimaLinha = wsRevisao.Cells(wsRevisao.Rows.Count, "A").End(xlUp).Row

' Se a planilha tiver apenas o cabeçalho (ou estiver vazia), para aqui
If ultimaLinha < 2 Then
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    MsgBox "Não há dados para processar na aba.", vbInformation, "Aviso"
    Exit Sub
End If

' Define o array de caracteres a serem removidos da Coluna B
charsToRemove = Array("&", "%", "#", "*", "$")

' Loop por todas as linhas, começando da linha 2 (abaixo do cabeçalho)
For i = 2 To ultimaLinha

    ' --- Tarefa 2: Coluna A (ID_Cliente) ---
    ' Adiciona o prefixo "Byte_"
    With wsRevisao.Cells(i, "A")
        .Value = "Byte_" & .Value
    End With
    
    ' --- Tarefa 3: Coluna B (Clientes) ---
    ' Remove os caracteres especiais
    tempString = wsRevisao.Cells(i, "B").Value
    For Each char In charsToRemove
        tempString = Replace(tempString, char, "")
    Next char
    ' O Trim remove espaços extras no início ou fim que podem ter sobrado
    wsRevisao.Cells(i, "B").Value = Trim(tempString)

  ' --- Tarefa 4: Coluna C (Total Investido) ---
    ' Converte o texto (em formato BRASILEIRO "25.000,00")
    ' para o número 25000
    ' e formata no padrão Americano ("25,000.00")
    With wsRevisao.Cells(i, "C")
        
        ' 1. Pega o valor como texto e limpa
        tempString = Trim(CStr(.Value))
        tempString = Replace(tempString, "R$ ", "", 1, 1, vbTextCompare)
        tempString = Replace(tempString, "R$", "", 1, 1, vbTextCompare)
        
        ' 2. Prepara a string para conversão NUMÉRICA (padrão BRASILEIRO)
        ' Input de exemplo: "25.000,00"
        
        ' Remove separador de milhar (ponto)
        tempString = Replace(tempString, ".", "")
        
        ' String agora é: "25000,00"
        
        ' 3. Converte a string "25000,00" para um número.
        ' O CDbl() em um sistema com localidade BRASILEIRA vai ler "25000,00"
        ' corretamente como o número 25000.
        If IsNumeric(tempString) Then
            .Value = CDbl(tempString) ' Converte a string "25000,00" para o NÚMERO 25000
            
            ' 4. Aplica a formatação "Esperada" (formato Americano com R$)
            ' Ex: R$ 25,000.00
            .NumberFormat = "R$ #,##0.00"
            
        Else
            ' Se não for um número (ex: texto), marca como erro
            .Value = "Erro de Conversão"
        End If
    End With
    
    ' --- Tarefa 5: Coluna D (E-mail Interno Cliente) ---
    ' Cria o e-mail usando o NOVO valor da Coluna A
    wsRevisao.Cells(i, "D").Value = wsRevisao.Cells(i, "A").Value & "@bytebank.com.br"
    
Next i ' Vai para a próxima linha

Restante do código:

' --- 4. FORMATAÇÃO DA TABELA (Tarefa 6) ---

' Define o intervalo total dos dados, incluindo o cabeçalho
Set rngDados = wsRevisao.Range("A1:D" & ultimaLinha)

' 1. Converte o intervalo em uma Tabela oficial do Excel
' Isso adiciona filtros e formatação listrada automaticamente
On Error Resume Next ' Evita erro se já for uma tabela
Set tbl = wsRevisao.ListObjects.Add(xlSrcRange, rngDados, , xlYes)
tbl.Name = "Tabela_Clientes_" & Format(Now, "YYYYMMDD")
' Aplica um estilo de tabela azul claro (pode mudar se preferir)
tbl.TableStyle = "TableStyleLight14"
On Error GoTo 0

' 2. Aplica a formatação específica do cabeçalho
With tbl.HeaderRowRange
    .Font.Bold = True
    .Interior.Color = RGB(220, 230, 241) ' Um azul claro suave
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
End With

' Ajusta a largura das colunas para caber o novo conteúdo
wsRevisao.Columns("A:D").AutoFit

' --- 5. FINALIZAÇÃO ---

' Reativa a atualização de tela e alertas
Application.ScreenUpdating = True
Application.DisplayAlerts = True

' Seleciona a nova aba para o usuário ver o resultado
wsRevisao.Activate
wsRevisao.Range("A1").Select

MsgBox "Processo concluído com sucesso!" & vbNewLine & _
       "Aba '" & nomeNovaAba & "' foi criada e formatada.", vbInformation, "Sucesso"
       
' Limpa as variáveis da memória
Set wsFonte = Nothing
Set wsRevisao = Nothing
Set rngDados = Nothing
Set tbl = Nothing

End Sub

Ei! Tudo bem, Janaina?

Que legal ver o resultado da sua tentativa! O código está muito bem estruturado e que atende as suas especificações. Em alguns pontos ele deixou até mais robusto, por exemplo: você pediu no prompt (Ex: Revisada 2025 10 20), sugerindo apenas Data. O código gerado usou Format(Now, "YYYY-MM-DD HH-MM-SS"), incluindo Hora, Minuto e Segundo, o que garante um nome único e é mais seguro em muitos casos

Podemos concluir que as IA's estão avançando cada vez mais e se tornando um assistente capacitado para gerar códigos funcionais.

Parabéns pela escolha do prompt e pela sua análise! Qualquer dúvida, compartilhe no fórum.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!