Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Outras formas de fazer a correção

Boa tarde! Eu consegui fazer a correção nos dados de outras duas formas diferentes do que a demonstrada pelo professor:

**A primeira forma foi utilizando o VBA para automatizar o autopreenchimento das fórmulas Esquerda e direita da linha 2 até a última linha da tabela (criei variáveis para a última linha da tabela, assim o código funcionará ainda que o número de entradas aumente). O código ainda faz a cópia dos valores resultantes de cada uma das fórmulas para as colunas de Produto (coluna B) e Vendedor (coluna H).

Esse foi o código que eu usei: **

Sub Formatação_1()


'utilizando o comando crtl+seta pra cima e crt+seta pra baixo, cria uma varíavel para descobrir o número da última linha da tabela.
    Range("I2").Select
    linha_inicial = ActiveCell.Row
    
    Range("A1048576").Select
    Selection.End(xlUp).Select
    linha_final = ActiveCell.Row
    Application.CutCopyMode = False
    
 'fazer a fórmula 'direita' na célula i2, criar uma variável para o intervalo da coluna i até a última linha da tabela (com base na variável criada anteriormente)
    Range("I2").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(RC[-7],5)"
    Range("I2").Select
    Rg = "I" & linha_inicial & ":I" & linha_final
    Selection.AutoFill Destination:=Range(Rg)
    
'criar uma variável para o intervalo da coluna B até a última linha da tabela (com base na variável criada anteriormente), selecionar o intervalo e apagar o conteúdo
  Range(Rg).Select
  Selection.Copy
  Rg_2 = "J" & linha_inicial & ":J" & linha_final
Range(Rg_2).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
  
    
    Rg_3 = "B" & linha_inicial & ":B" & linha_final
    Range(Rg_3).Select
    Selection.ClearContents
    Range(Rg_2).Select
    Selection.Copy
    Range(Rg_3).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range(Rg_2).Select
    Selection.ClearContents
    
    Range("I2").Select
    ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],5)"
    Range("I2").Select
    Rg = "I" & linha_inicial & ":I" & linha_final
    Selection.AutoFill Destination:=Range(Rg)
    Range(Rg).Select
  Selection.Copy
  Rg_2 = "J" & linha_inicial & ":J" & linha_final
Range(Rg_2).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
    Rg_4 = "H" & linha_inicial & ":H" & linha_final
    Range(Rg_4).Select
    Selection.ClearContents
    Range(Rg_2).Select
    Selection.Copy
    Range(Rg_4).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range(Rg_2).Select
    Selection.ClearContents
    Range(Rg).Select
    Selection.ClearContents

End sub

**A segunda forma que fiz foi fazer a automação do recurso localizar e substituir para que na coluna B (produtos) o caractere "$" seja substituído por "" (espaço em branco) e para que na coluna H (vendedor) o caractere "#" seja substituído por "" (espaço em branco).

Considero essa a melhor opção para se fazer a correção dos dados, pois, a correção somente será feita nas células que contenham caracteres estranhos. ** o código que utilizei foi:

Sub Formatação_2()

     Range("I2").Select
    linha_inicial = ActiveCell.Row
    
    Range("A1048576").Select
    Selection.End(xlUp).Select
    linha_final = ActiveCell.Row
    Application.CutCopyMode = False
    Rg_2 = "B" & linha_inicial & ":B" & linha_final
    Range(Rg_2).Select
    Selection.Replace What:="$", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
        
    Rg_3 = "H" & linha_inicial & ":H" & linha_final
    Range(Rg_3).Select
    Selection.Replace What:="#", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
End Sub

**Com relação à forma utilizada pelo professor na aula, fiz só uma seguinte modificação, para inserir no próprio código VBA a aplicação da fórmula contarvalores, meu código ficou assim: **

Sub Formatação_3()

    Range("J1").Select
    ActiveCell.FormulaR1C1 = "=COUNTA(C[-8])"
    
    For contador = 2 To Range("J1")
    
    Range("B" & contador) = Right(Range("B" & contador), 5)
    Range("H" & contador) = Left(Range("H" & contador), 5)
    Next
    
    
End Sub
1 resposta
solução!

Olá Lucas, tudo bem com você?

Te agradeço por dividir seu raciocínio e ampliar o conhecimento da Comunidade Alura. Na programação, há múltiplos caminhos para se atingir uma solução, o que gera bastante versatilidade no dia a dia e você demonstrou saber isso. Todos os formatos que você propôs são válidos para resolver o problema e a escolha de um formato específico dependerá das necessidades e ocasião.

Continue praticando e conte com a Alura nesta jornada!

Abraços e bons estudos

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software