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
Postado : 13/09/2020 9:08 pm