Dúvida formatação/s...
 
Notifications
Clear all

Dúvida formatação/substituir "." por ","  

  RSS

Pedro12345
(@pedro12345)
Eminent Member
Entrou: 4 anos atrás
Posts: 41
13/09/2020 3:50 pm  

Boa tarde,

 

Preciso da vossa ajuda pois estou a ter dificuldades em conseguir obter o valor correto em algumas colunas formatadas.

Em resumo: peguei no ficheiro .csv e copiei e colei os dados para um ficheiro .xlsm.

Formatei todos os dados para número

0.302166
22.5282
91.4558
91.12
92.0601
90.0457

 

mas obtenho este resultado:

0,302166
225282,0
914558,0
91,12
920601,0
900457,0

alguma ideia como contornar este problema?

 

Range(Columns(10), Columns(colt)).Select
Selection.NumberFormat = "0.0"

Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2

 

O curioso é que consegui gravar macro, selecionando a coluna e substituindo o ponto para virgula e o valor da coluna "J" e ao gravar sai tudo correto, mas depois ao compilar a macro gravada, já fica desformatado o número (nº 91,4558 fica como 914558,0).

Obrigado,

Pedro

Este tópico foi modificado 1 semana atrás 3 vezes by Pedro12345

ResponderCitar (Quote)
EdsonBR
(@edsonbr)
Membro Moderator
Entrou: 5 anos atrás
Posts: 640
13/09/2020 9:08 pm  

Boa noite, @pedro12345

Esse é um velho problema do Replace ao substituir separador decimal. Para contorná-lo, a abordagem mais comum é usar o Texto-para-Colunas, porém como o número de colunas no seu modelo parece ser variável (da 10 até a "colt"), daria pra fazer loop de uma em uma coluna (Alternativa 1).

Ou atacar o problema suspendendo e substituindo brevemente o uso da vírgula como separador decimal para ponto, convertendo os valores e restabelecendo para o normal em seguida. A vantagem é que não precisaria loop (Alternativa 2).

Seguem as duas alternativas, elimine o bloco que não desejar pois são redundantes.

Obs.: tomei a liberdade de restringir o intervalo não mais pra coluna inteira mas sim para a área que vai até o fim dos dados pra reduzir o tempo de processamento.

Sub TransformarSeparadorDecimal()
  Dim rg As Range, coluna As Range
  Set rg = Intersect([A4].CurrentRegion, Range(Columns(10), Columns(colt)))
  rg.NumberFormat = "0.0"
  
'======= Alternativa 1:=================================================================
  For Each coluna In rg.Columns
    coluna.TextToColumns Destination:=coluna, DataType:=xlFixedWidth, _
                         FieldInfo:=Array(0, xlGeneralFormat), DecimalSeparator:=".", _
                         ThousandsSeparator:=",", TrailingMinusNumbers:=True
  Next coluna
  
'======= Alternativa 2:=================================================================
  With Application
    .DecimalSeparator = ".": .ThousandsSeparator = ","
      .UseSystemSeparators = False
        rg.Value = rg.Value
      .UseSystemSeparators = True
    .DecimalSeparator = ",": .ThousandsSeparator = "."
  End With
End Sub


Pedro12345 curtiu
ResponderCitar (Quote)
Pedro12345
(@pedro12345)
Eminent Member
Entrou: 4 anos atrás
Posts: 41
15/09/2020 4:19 am  

Resultou!! Utilizei a alternativa 1.

Muito obrigado! 😀 


ResponderCitar (Quote)
Compartilhar: